updates.
authorPekka Riikonen <priikone@silcnet.org>
Sun, 14 Jan 2007 15:21:08 +0000 (15:21 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Sun, 14 Jan 2007 15:21:08 +0000 (15:21 +0000)
CHANGES
TODO
doc/Makefile.ad
doc/draft-riikonen-presence-attrs-04.nroff
doc/draft-riikonen-silc-commands-06.nroff
doc/draft-riikonen-silc-commands-07.nroff [new file with mode: 0644]
doc/draft-riikonen-silc-ke-auth-09.nroff
doc/draft-riikonen-silc-multimedia-session-00.nroff [new file with mode: 0644]
doc/draft-riikonen-silc-pp-09.nroff
doc/draft-riikonen-silc-spec-09.nroff
lib/doc/command_reply_args.html

diff --git a/CHANGES b/CHANGES
index 2728fef9af9c4f9afb7f3eae0e1bbfff9ce9af6f..e46811d786893243c6eee5cbc739cc90082fbe6d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,10 @@
+Tue Jan  9 19:37:51 EET 2007  Pekka Riikonen <priikone@silcnet.org>
+
+       * Rewrote connection auth request in client library.  It is now
+         done automatically by the library and the resolved method given
+         as a hint to get_auth_method client operation.  Affected files
+         are lib/silcclient/.
+
 Wed Jan  3 18:06:33 EET 2007  Pekka Riikonen <priikone@silcnet.org>
 
        * Added silc_packet_stream_wrap into lib/silccore/silcpacket.[ch].
diff --git a/TODO b/TODO
index 39edc027bd6ec5c8aa15c0f93a72badc3dfa0b57..9c7561bcba6151b798ee396fbf52474d175bd1a2 100644 (file)
--- a/TODO
+++ b/TODO
@@ -38,7 +38,9 @@ lib/silcclient, The Client Library    ***PARTLY DONE****
 
  o File transfer rewrite.
 
- o Connection auth request.
+ o Connection auth request. (***DONE)
+
+ o Password auth test, public key auth test.
 
  o Starting key exchange directly, rewrite. (***DONE)
 
@@ -49,8 +51,6 @@ lib/silcclient, The Client Library    ***PARTLY DONE****
    of using client->sha1hash and client->md5hash, or some kind of thread
    safe (no locking) concept.
 
- o Password auth test, public key auth test.
-
  o Key agreement rewrite. (***TESTING NEEDED)
 
  o Connecting to remote client (***DONE)
@@ -82,9 +82,11 @@ lib/silcsftp                 ****DONE****
  o Porting to use the new util library. (***DONE)
 
 
-lib/silccore/silcpacket.[ch]   ****DONE****
+lib/silccore/silcpacket.[ch]   ****PARTLY DONE****
 ============================
 
+ o Implement ACK packet and packet payload.
+
  o SilcPacketEngine. (***DONE)
 
  o New SILC Packet API. (***DONE)
@@ -135,6 +137,11 @@ lib/silcske/silcske.[ch]   ****DONE****
 lib/silccrypt                  ****PARTLY DONE****
 =============
 
+ o Implement SILC Public Key Version 2 handling in sign/verify.  Implement
+   Version (V) identifier.
+
+ o Implement PKCS #1 sign/verify with hash OID.
+
  o Implement the defined SilcDH API.  The definition is in
    lib/silccrypt/silcdh.h.
 
index f5926593553c7199241d5bb1445aa9be1a8ae10d..03b154fe635add10f186c296afbe34b325ab96ea 100644 (file)
@@ -3,7 +3,7 @@
 #
 #  Author: Pekka Riikonen <priikone@silcnet.org>
 #
-#  Copyright (C) 2000 - 2005 Pekka Riikonen
+#  Copyright (C) 2000 - 2007 Pekka Riikonen
 #
 #  This program is free software; you can redistribute it and/or modify
 #  it under the terms of the GNU General Public License as published by
 AUTOMAKE_OPTIONS = 1.0 no-dependencies foreign
 
 all:
-       touch draft-riikonen-silc-spec-08.txt
+       touch draft-riikonen-silc-spec-09.txt
        touch draft-riikonen-silc-pp-09.txt
-       touch draft-riikonen-silc-ke-auth-08.txt
-       touch draft-riikonen-silc-commands-06.txt
+       touch draft-riikonen-silc-ke-auth-09.txt
+       touch draft-riikonen-silc-commands-07.txt
        touch draft-riikonen-silc-flags-payloads-04.txt
-       touch draft-riikonen-presence-attrs-03.txt
+       touch draft-riikonen-silc-multimedia-session-00.txt
+       touch draft-riikonen-presence-attrs-04.txt
 
 #ifdef SILC_DIST_TOOLKIT
 makerfc = $(SILC_TOP_SRCDIR)/scripts/makerfc
@@ -52,35 +53,39 @@ toolkit-ref-pdf:
 
 dist-hook:
        $(SILC_TOP_SRCDIR)/scripts/manpages.pl
-       touch draft-riikonen-silc-spec-08.txt
+       touch draft-riikonen-silc-spec-09.txt
        touch draft-riikonen-silc-pp-09.txt
-       touch draft-riikonen-silc-ke-auth-08.txt
-       touch draft-riikonen-silc-commands-06.txt
+       touch draft-riikonen-silc-ke-auth-09.txt
+       touch draft-riikonen-silc-commands-07.txt
        touch draft-riikonen-silc-flags-payloads-04.txt
-       touch draft-riikonen-presence-attrs-03.txt
-       $(makerfc) draft-riikonen-silc-spec-08.nroff \
-               draft-riikonen-silc-spec-08.txt
+       touch draft-riikonen-silc-multimedia-session-00.txt
+       touch draft-riikonen-presence-attrs-04.txt
+       $(makerfc) draft-riikonen-silc-spec-09.nroff \
+               draft-riikonen-silc-spec-09.txt
        $(makerfc) draft-riikonen-silc-pp-09.nroff \
                draft-riikonen-silc-pp-09.txt
-       $(makerfc) draft-riikonen-silc-ke-auth-08.nroff \
-               draft-riikonen-silc-ke-auth-08.txt
-       $(makerfc) draft-riikonen-silc-commands-06.nroff \
-               draft-riikonen-silc-commands-06.txt
+       $(makerfc) draft-riikonen-silc-ke-auth-09.nroff \
+               draft-riikonen-silc-ke-auth-09.txt
+       $(makerfc) draft-riikonen-silc-commands-07.nroff \
+               draft-riikonen-silc-commands-07.txt
        $(makerfc) draft-riikonen-silc-flags-payloads-04.nroff \
                draft-riikonen-silc-flags-payloads-04.txt
-       $(makerfc) draft-riikonen-presence-attrs-03.nroff \
-               draft-riikonen-presence-attrs-03.txt
+       $(makerfc) draft-riikonen-silc-multimedia-session-00.nroff \
+               draft-riikonen-silc-multimedia-session-00.txt
+       $(makerfc) draft-riikonen-presence-attrs-04.nroff \
+               draft-riikonen-presence-attrs-04.txt
 
 #else !SILC_DIST_TOOLKIT
 dist-hook:
        $(SILC_TOP_SRCDIR)/scripts/manpages.pl
        rm draft-riikonen*.txt
-       touch draft-riikonen-silc-spec-08.txt
+       touch draft-riikonen-silc-spec-09.txt
        touch draft-riikonen-silc-pp-09.txt
-       touch draft-riikonen-silc-ke-auth-08.txt
-       touch draft-riikonen-silc-commands-06.txt
+       touch draft-riikonen-silc-ke-auth-09.txt
+       touch draft-riikonen-silc-commands-07.txt
        touch draft-riikonen-silc-flags-payloads-04.txt
-       touch draft-riikonen-presence-attrs-03.txt
+       touch draft-riikonen-silc-multimedia-session-00.txt
+       touch draft-riikonen-presence-attrs-04.txt
 #endif SILC_DIST_TOOLKIT
 
 doc-install:
index 7e48104e3040869d2c87dbe9299f755dcbe3116b..b28d4a380297673da2bf9161201a84fa9cb975a8 100644 (file)
@@ -8,7 +8,7 @@
 .ds RF FORMFEED[Page %]
 .ds CF
 .ds LH Internet Draft
-.ds RH XXXXX
+.ds RH 15 January 2007
 .ds CH
 .na
 .hy 0
@@ -16,8 +16,8 @@
 .nf
 Network Working Group                                        P. Riikonen
 Internet-Draft
-draft-riikonen-presence-attrs-03.txt                     XXXx
-Expires: XXX
+draft-riikonen-presence-attrs-04.txt                     15 January 2007
+Expires: 15 July 2007
 
 .in 3
 
@@ -28,24 +28,24 @@ User Online Presence and Information Attributes
 .ti 0
 Status of this Memo
 
-This document is an Internet-Draft and is in full conformance with   
-all provisions of Section 10 of RFC 2026.  Internet-Drafts are   
-working documents of the Internet Engineering Task Force (IETF), its   
-areas, and its working groups.  Note that other groups may also   
-distribute working documents as Internet-Drafts.   
+This document is an Internet-Draft and is in full conformance with
+all provisions of Section 10 of RFC 2026.  Internet-Drafts are
+working documents of the Internet Engineering Task Force (IETF), its
+areas, and its working groups.  Note that other groups may also
+distribute working documents as Internet-Drafts.
 
-Internet-Drafts are draft documents valid for a maximum of six months   
-and may be updated, replaced, or obsoleted by other documents at any   
-time.  It is inappropriate to use Internet-Drafts as reference   
-material or to cite them other than as "work in progress."   
+Internet-Drafts are draft documents valid for a maximum of six months
+and may be updated, replaced, or obsoleted by other documents at any
+time.  It is inappropriate to use Internet-Drafts as reference
+material or to cite them other than as "work in progress."
 
-The list of current Internet-Drafts can be accessed at   
-http://www.ietf.org/ietf/1id-abstracts.txt   
+The list of current Internet-Drafts can be accessed at
+http://www.ietf.org/ietf/1id-abstracts.txt
 
-The list of Internet-Draft Shadow Directories can be accessed at   
-http://www.ietf.org/shadow.html   
+The list of Internet-Draft Shadow Directories can be accessed at
+http://www.ietf.org/shadow.html
 
-The distribution of this memo is unlimited.  
+The distribution of this memo is unlimited.
 
 
 .ti 0
@@ -79,7 +79,7 @@ Table of Contents
   2.3 Attribute Data Types ......................................  4
   2.4 Attribute Payload .........................................  4
   2.5 Attributes ................................................  5
-3 Security Considerations .......................................  11
+3 Security Considerations .......................................  12
 4 References ....................................................  12
 5 Author's Address ..............................................  13
 6 Full Copyright Statement ......................................  13
@@ -117,7 +117,7 @@ suitable for general purpose usage.
 .ti 0
 1.1 Requirements Terminology
 
-The keywords MUST, MUST NOT, REQUIRED, SHOULD, SHOULD NOT, RECOMMENDED, 
+The keywords MUST, MUST NOT, REQUIRED, SHOULD, SHOULD NOT, RECOMMENDED,
 MAY, and OPTIONAL, when they appear in this document, are to be
 interpreted as described in [RFC2119].
 
@@ -297,7 +297,7 @@ multiple same attributes in the packet.
      information, or with the required precision that may be desired in
      some applications.  It is therefore RECOMMENDED that this attribute
      would be used to provide only basic and constant user information,
-     such as name and contact information, but not online status 
+     such as name and contact information, but not online status
      information.
 
      Length       Type       Value
@@ -509,7 +509,7 @@ multiple same attributes in the packet.
      Note that these public keys are intended for signing.  Some
      certificates may have a key usage restrictions and same key cannot
      be used for both encryption and signing.  Therefore, the name
-     of the certificate type indicates if they are intended for 
+     of the certificate type indicates if they are intended for
      signing only.
 
 
@@ -518,7 +518,7 @@ multiple same attributes in the packet.
      This attribute includes a third party server or authority public
      key or CA certificate and MUST be present if the attribute
      ATTRIBUTE_SERVER_DIGITAL_SIGNATURE is also present.  The format
-     for this attribute is identical to the ATTRIBUTE_USER_PUBLIC_KEY 
+     for this attribute is identical to the ATTRIBUTE_USER_PUBLIC_KEY
      attribute.  If there are more than one ATTRIBUTE_SERVER_PUBLIC_KEY
      attributes set and ATTRIBUTE_SERVER_DIGITAL_SIGNATURE is also set,
      the digital signature SHOULD be verifiable with the first set public
@@ -529,8 +529,8 @@ multiple same attributes in the packet.
 
      This attribute value includes digital signature of all Attribute
      Payloads except this attribute.  This signature can be provided by
-     the user.  This attribute SHOULD be last attribute provided in the 
-     reply so that it is easier for the receiver to compute the signature 
+     the user.  This attribute SHOULD be last attribute provided in the
+     reply so that it is easier for the receiver to compute the signature
      data to be verified.  The format and encoding of this attribute
      depends on the public key or certificate used to produce the
      signature.  See the ATTRIBUTE_USER_PUBLIC_KEY for all public keys
@@ -561,7 +561,7 @@ multiple same attributes in the packet.
      information provided by the user.  How it verifies this information
      is out of scope of this document, however it may base its
      information to a previous registration information and current
-     online status of the user in a service.  This attribute SHOULD be 
+     online status of the user in a service.  This attribute SHOULD be
      last when provided, so that it is easier for the receiver to
      compute the signature data to be verified.  The format for this
      attribute is identical to the ATTRIBUTE_USER_DIGITAL_SIGNATURE
@@ -605,7 +605,7 @@ attributes on behalf of the actual user for some of the attributes.
 
 
 .ti 0
-4 References 
+4 References
 
 [RFC2119]    Bradner, S., "Key Words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.
@@ -620,16 +620,16 @@ attributes on behalf of the actual user for some of the attributes.
              RFC 2426, September 1998.
 
 [SILC1]      Riikonen, P., "Secure Internet Live Conferencing (SILC),
-             Protocol Specification", Internet Draft, May 2002.
+             Protocol Specification", Internet Draft, January 2007.
 
 [RFC2440]    Callas, J., et al, "OpenPGP Message Format", RFC 2440,
              November 1998.
 
-[RFC2459]    Housley, R., et al, "Internet X.509 Public Key 
+[RFC2459]    Housley, R., et al, "Internet X.509 Public Key
              Infrastructure, Certificate and CRL Profile", RFC 2459,
              January 1999.
 
-[SSH-TRANS]  Ylonen, T., et al, "SSH Transport Layer Protocol", 
+[SSH-TRANS]  Ylonen, T., et al, "SSH Transport Layer Protocol",
              Internet Draft.
 
 [PKCS7]      Kalinski, B., "PKCS #7: Cryptographic Message Syntax,
@@ -642,8 +642,7 @@ attributes on behalf of the actual user for some of the attributes.
 5 Author's Address
 
 Pekka Riikonen
-Snellmaninkatu 34 A 15
-70100 Kuopio
+Helsinki
 Finland
 
 EMail: priikone@iki.fi
@@ -677,4 +676,3 @@ TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
 BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
 HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
 MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
index 25da42b729d4a5ed37ff80387197406c649f616f..00f3eef39b194aef9a910ad3b2a02d07d556c1f6 100644 (file)
@@ -966,11 +966,12 @@ List of all defined commands in SILC follows.
         <channel auth> Authentication Payload's Public Data field
         MUST include an indication of the public key to be used.  The
         first 20 bytes of the Public Data field MUST be SHA-1 digest of
-        the public key that must be used in verification.  Rest of the
-        Public Data field are set as defined in [SILC1].  This way server
-        can determine from the digest whether that public key exist on the
-        channel and then use that key in verification.  The hash function
-        used with <channel auth> MUST be sha1.
+        the public key that must be used in verification.  The digest
+        is the SILC Public Key fingerprint.  Rest of thePublic Data field
+        are set as defined in [SILC1].  This way server can determine from
+        the digest whether that public key exist on the channel and then
+        use that key in verification.  The hash function used with
+        <channel auth> MUST be sha1.
 
         The server MUST check whether the user is allowed to join to
         the requested channel.  Various modes set to the channel affect
diff --git a/doc/draft-riikonen-silc-commands-07.nroff b/doc/draft-riikonen-silc-commands-07.nroff
new file mode 100644 (file)
index 0000000..699f4fb
--- /dev/null
@@ -0,0 +1,2650 @@
+.pl 10.0i
+.po 0
+.ll 7.2i
+.lt 7.2i
+.nr LL 7.2i
+.nr LT 7.2i
+.ds LF Riikonen
+.ds RF FORMFEED[Page %]
+.ds CF
+.ds LH Internet Draft
+.ds RH 15 January 2007
+.ds CH
+.na
+.hy 0
+.in 0
+.nf
+Network Working Group                                        P. Riikonen
+Internet-Draft
+draft-riikonen-silc-commands-07.txt                      15 January 2007
+Expires: 15 July 2007
+
+.in 3
+
+.ce 2
+SILC Commands
+<draft-riikonen-silc-commands-07.txt>
+
+.ti 0
+Status of this Memo
+
+This document is an Internet-Draft and is in full conformance with
+all provisions of Section 10 of RFC 2026.  Internet-Drafts are
+working documents of the Internet Engineering Task Force (IETF), its
+areas, and its working groups.  Note that other groups may also
+distribute working documents as Internet-Drafts.
+
+Internet-Drafts are draft documents valid for a maximum of six months
+and may be updated, replaced, or obsoleted by other documents at any
+time.  It is inappropriate to use Internet-Drafts as reference
+material or to cite them other than as "work in progress."
+
+The list of current Internet-Drafts can be accessed at
+http://www.ietf.org/ietf/1id-abstracts.txt
+
+The list of Internet-Draft Shadow Directories can be accessed at
+http://www.ietf.org/shadow.html
+
+The distribution of this memo is unlimited.
+
+
+.ti 0
+Abstract
+
+This memo describes the commands used in the Secure Internet Live
+Conferencing (SILC) protocol, specified in the Secure Internet Live
+Conferencing, Protocol Specification [SILC1].  The SILC Commands are
+very important part of the SILC protocol.  Usually the commands are used
+by SILC clients to manage the SILC session, but also SILC servers may
+use the commands.  This memo specifies detailed command messages and
+command reply messages.
+
+
+
+
+
+
+
+
+.ti 0
+Table of Contents
+
+.nf
+1 Introduction ..................................................  2
+  1.1 Requirements Terminology ..................................  2
+2 SILC Commands .................................................  2
+  2.1 SILC Commands Syntax ......................................  4
+  2.2 SILC Command Argument Idioms ..............................  4
+  2.3 SILC Commands List ........................................  5
+  2.4 SILC Command Status Payload ............................... 43
+3 SILC Status Types ............................................. 44
+4 Security Considerations ....................................... 51
+5 References .................................................... 51
+6 Author's Address .............................................. 52
+Appendix A ...................................................... 52
+Full Copyright Statement ........................................ 54
+
+
+.ti 0
+1. Introduction
+
+This document describes the commands used in the Secure Internet Live
+Conferencing (SILC) protocol, specified in the Secure Internet Live
+Conferencing, Protocol Specification [SILC1].  This document specifies
+detailed command messages and command reply messages.
+
+Commands are very important part on SILC network especially for client
+which uses commands to operate on the SILC network.  Commands are used
+to set nickname, join to channel, change modes and many other things.
+
+See the [SILC1] for the requirements and the restrictions for the usage
+of the SILC commands.  The [SILC2] defines the command packet type and
+the Command Payload which is actually used to deliver the commands and
+command reply messages.
+
+
+.ti 0
+1.1 Requirements Terminology
+
+The keywords MUST, MUST NOT, REQUIRED, SHOULD, SHOULD NOT, RECOMMENDED,
+MAY, and OPTIONAL, when they appear in this document, are to be
+interpreted as described in [RFC2119].
+
+
+.ti 0
+2 SILC Commands
+
+.ti 0
+2.1 SILC Commands Syntax
+
+This section briefly describes the syntax of the command notions
+in this document.  Every field in command is separated from each
+other by whitespaces (` ') indicating that each field is independent
+argument and each argument MUST have own Command Argument Payload.
+The number of maximum arguments are defined with each command
+separately.  The Command Argument Payload is described in [SILC2].
+
+Every command defines specific number for each argument.  Currently,
+they are defined in ascending order; first argument has number one
+(1), second has number two (2) and so on.  This number is set into the
+Argument Type field in the Command Argument Payload.  This makes it
+possible to send the arguments in free order as the number MUST be
+used to identify the type of the argument.  This makes is it also
+possible to have multiple optional arguments in commands and in
+command replies.  The number of argument is marked in parentheses
+before the actual argument.
+
+
+
+.in 6
+Example:  Arguments:  (1) <nickname> (2) <username@host>
+.in 3
+
+
+Every command replies with Status Payload.  This payload tells the
+sender of the command whether the command was completed successfully or
+whether there was an error.  If error occurred the payload includes the
+error type.  In the next section the Status Payload is not described
+as it is common to all commands and has been described here.  Commands
+MAY reply with other arguments as well.  These arguments are command
+specific and are described in the next section.
+
+Example command:
+.in 6
+
+EXAMPLE_COMMAND
+
+.in 8
+Max Arguments:  3
+    Arguments:  (1) <nickname>[@<server>]  (2) <message>
+                (3) [<count>]
+
+The command has maximum of 3 arguments.  However, only first
+and second arguments are mandatory.
+
+First argument <nickname> is mandatory but may have optional
+<nickname@server> format as well.  Second argument is mandatory
+<message> argument.  Third argument is optional <count> argument.
+
+The numbers in parentheses are the argument specific numbers
+that specify the type of the argument in Command Argument Payload.
+The receiver always knows that, say, argument number two (2) is
+<message> argument, regardless of the ordering of the arguments in
+the Command Payload.
+
+Reply messages to the command:
+
+Max Arguments:  4
+    Arguments:  (1) <Status Payload>  (2) [<channel list>]
+                (3) <idle time>       (4) [<away message>]
+
+This command may reply with maximum of 4 arguments.  However,
+only the first and third arguments are mandatory.  The numbers
+in the parentheses have the same meaning as in the upper
+command sending specification.
+
+Every command reply with <Status Payload>, it is mandatory
+argument for all command replies and for this reason it is not
+described in the command reply descriptions.
+
+
+
+Status messages:
+
+    SILC_STATUS_OK
+    SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+    SILC_STATUS_ERR_NO_SUCH_NICK
+
+Every command reply also defines set of status message that it
+may return inside the <Status Payload>.  All status messages
+are defined in the section 2.3 SILC Command Status Payload
+The status messages defined with the command are recommendations.
+It is possible to return other status messages not listed with
+the command reply definition.
+.in 3
+
+
+.ti 0
+2.2 SILC Command Argument Idioms
+
+All commands that has an ID as argument (for example <Client ID>) are
+actually ID Payloads, defined in [SILC2] that includes the type of the
+ID, length of the ID and the actual ID data.  This way variable length
+ID's can be sent as arguments.
+
+All passphrases that may be sent in commands as arguments MUST be
+UTF-8 [RFC3629] encoded.  All strings sent as arguments in command and
+command reply are also UTF-8 encoded, unless otherwise defined.  See
+the [SILC1] for general UTF-8 definition in SILC protocol.
+
+All public keys and certificates that are sent as arguments are actually
+Public Key Payloads [SILC2].  This way it is possible to send different
+kind of public keys and certificate types as arguments.
+
+
+
+
+.ti 0
+2.3 SILC Commands List
+
+This section lists all SILC commands, however, it is expected that a
+implementation and especially client implementation has many more
+commands that has only local affect.  These commands are official
+SILC commands that has both client and server sides and cannot be
+characterized as local commands.
+
+List of all defined commands in SILC follows.
+
+.in 0
+   0    SILC_COMMAND_NONE
+
+        None.  This is reserved command and MUST NOT be sent.
+
+
+   1    SILC_COMMAND_WHOIS
+
+        Max Arguments:  256
+            Arguments:  (1) [<nickname>[@<server>]]   (2) [<count>]
+                        (3) [<Requested Attributes>]  (4) [<Client ID>]
+                        (n) [...]
+
+        Whois command is used to query various information about specific
+        user.  The user may be requested by their nickname and server name.
+        The query may find multiple matching users as there are no unique
+        nicknames in the SILC.  The <count> option may be given to narrow
+        down the number of accepted results.  If this is not defined there
+        are no limit of accepted results.  The query may also be narrowed
+        down by defining the server name of the nickname.  The <count> is
+        32 bit MSB first order integer.
+
+        It is also possible to search the user by Client ID.  If the
+        <Client ID> is provided server MUST use it as the search value
+        instead of the <nickname>.  It is also possible to define multiple
+        Client ID's to search multiple users sending only one WHOIS
+        command.  In this case the Client ID's are appended as normal
+        arguments.
+
+        The <Requested Attributes> is defined in [ATTRS] and can be used
+        to request various information about the client.  See Appendix A
+        for definition of using these attributes in SILC.  If neither the
+        <nickname> or <Client ID> arguments are present but the attributes
+        are, the server MUST use the attributes to do the searching.  If
+        none of the arguments, <nickname>, <Client ID> and <Requested
+        Attributes> are present, error MUST be retuned.  Server MAY
+        use the <Requested Attributes> to narrow down the search if they
+        present at any time.
+
+        To prevent miss-use of this command wildcards in the nickname
+        or in the server name are not permitted.  It is not allowed
+        to request all users on some server.  The WHOIS requests MUST
+        be based on explicit nickname request.
+
+        The WHOIS request MUST be always sent to the router by normal
+        server so that all users are searched.  However, the server still
+        MUST search its locally connected clients.  The router MUST send
+        this command to the server which owns the requested client, if
+        the router is unable to provide all mandatory information about
+        the client.  That server MUST reply to the command.  Server MUST
+        NOT send whois replies to the client until it has received the
+        reply from its router.
+
+        Reply messages to the command:
+
+        Max Arguments:  11
+            Arguments:  (1) <Status Payload>       (2) <Client ID>
+                        (3) <nickname>[@<server>]  (4) <username@host>
+                        (5) <real name>            (6) [<Channel Payload
+                                                         list>]
+                        (7) [<user mode>]          (8) [<idle time>]
+                        (9) [<fingerprint>]        (10) <channel user
+                                                         mode list>
+                        (11) [<Attributes>]
+
+
+        This command may reply with several command reply messages to
+        form a list of results.  In this case the status payload will
+        include STATUS_LIST_START status in the first reply and
+        STATUS_LIST_END in the last reply to indicate the end of the
+        list.  If there are only one reply the status is set to normal
+        STATUS_OK.  If multiple Client IDs was requested then each found
+        and unfound client MUST cause successful or error reply,
+        respectively.
+
+        The command replies include the Client ID of the nickname,
+        nickname and server name, user name and host name and user's real
+        name.  Client should process these replies only after the last
+        reply has been received with the STATUS_LIST_END status.  If the
+        <count> option were defined in the query there will be only
+        <count> many replies from the server.
+
+        The server returns the list of channels if the client has
+        joined channels.  In this case the list is list of Channel
+        Payloads.  The Mode Mask in the Channel Payload is the channel's
+        mode.  The list is encoded by adding the Channel Payloads one
+        after the other.  Private and secret channels MUST NOT be sent,
+        except if the sender of this command is on those channels, or
+        the sender is server.  The <channel user mode list> MUST also
+        be sent if client is joined channels.  This list includes 32 bit
+        MSB first order values one after the other and each indicate
+        the user's mode on a channel.  The order of these values MUST
+        be same as the channel order in the <Channel Payload list>.
+
+        The server also returns client's user mode, idle time, and the
+        fingerprint of the client's public key.  The <fingerprint> is the
+        binary hash digest of the public key.  The fingerprint MUST NOT
+        be sent if the server has not verified the proof of possession of
+        the corresponding private key.  Server can do this during the
+        SILC Key Exchange protocol.  The <fingerprint> is SHA1 digest.
+
+        The <Attributes> is the reply to the <Requested Attributes>.
+        See the Appendix A for more information.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_LIST_START
+            SILC_STATUS_LIST_END
+            SILC_STATUS_ERR_NO_SUCH_NICK
+            SILC_STATUS_ERR_NO_SUCH_CLIENT_ID
+            SILC_STATUS_ERR_WILDCARDS
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+
+
+   2    SILC_COMMAND_WHOWAS
+
+        Max Arguments:  2
+            Arguments:  (1) <nickname>[@<server>]  (2) [<count>]
+
+        Whowas.  This command is used to query history information about
+        specific user.  The user may be requested by their nickname and
+        server name.  The query may find multiple matching users as there
+        are no unique nicknames in the SILC.  The <count> option may be
+        given to narrow down the number of accepted results.  If this
+        is not defined there are no limit of accepted results.  The query
+        may also be narrowed down by defining the server name of the
+        nickname.  The <count> is 32 bit MSB first order integer.
+
+        To prevent miss-use of this command wildcards in the nickname
+        or in the server name are not permitted.  The WHOWAS requests MUST
+        be based on specific nickname request.
+
+        The WHOWAS request MUST be always sent to the router by server
+        so that all users are searched.  However, the server still must
+        search its locally connected clients.
+
+        Reply messages to the command:
+
+        Max Arguments:  5
+            Arguments:  (1) <Status Payload>        (2) <Client ID>
+                        (3) <nickname>[@<server>]   (4) <username@host>
+                        (5) [<real name>]
+
+        This command may reply with several command reply messages to form
+        a list of results.  In this case the status payload will include
+        STATUS_LIST_START status in the first reply and STATUS_LIST_END in
+        the last reply to indicate the end of the list.  If there are only
+        one reply the status is set to normal STATUS_OK.
+
+        The command replies with nickname and user name and host name.
+        Every server MUST keep history for some period of time of its
+        locally connected clients.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_LIST_START
+            SILC_STATUS_LIST_END
+            SILC_STATUS_ERR_NO_SUCH_NICK
+            SILC_STATUS_ERR_WILDCARDS
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+
+
+   3    SILC_COMMAND_IDENTIFY
+
+        Max Arguments:  256
+            Arguments:  (1) [<nickname>[@<server>]]  (2) [<server name>]
+                        (3) [<channel name>]         (4) [<count>]
+                        (5) [<ID Payload>]           (n) [...]
+
+        Identify command is used to query information about an entity by
+        the entity's name or ID.  This command can be used to query
+        information about clients, servers and channels.
+
+        The query may find multiple matching entities.  The <count> option
+        may be given to narrow down the number of accepted results.  If
+        this is not defined there are no limit of accepted results.  The
+        <count> is 32 bit MSB first order integer.
+
+        It is also possible to search the entity by its ID.  If the
+        <ID Payload> is provided server must use it as the search value
+        instead of the entity's name.  One of the arguments MUST be given.
+        It is also possible to define multiple ID Payloads to search
+        multiple entities sending only one IDENTIFY command.  In this case
+        the ID Payloads are appended as normal arguments.  The type of the
+        entity is defined by the type of the ID Payload.
+
+        To prevent miss-use of this command wildcards in the names are
+        not permitted.  It is not allowed to request for example all users
+        on server.
+
+        Implementations may not want to give interface access to this
+        command as it is hardly a command that would be used by an end
+        user.  However, it must be implemented as it is most likely used
+        with private message sending.
+
+        The IDENTIFY command MUST be always sent to the router by server
+        so that all users are searched.  However, server MUST still search
+        its locally connected clients.
+
+        Reply messages to the command:
+
+        Max Arguments:  4
+            Arguments:  (1) <Status Payload>   (2) <ID Payload>
+                        (3) [<entity's name>]  (4) [<info>]
+
+        This command may reply with several command reply messages to form
+        a list of results.  In this case the status payload will include
+        STATUS_LIST_START status in the first reply and STATUS_LIST_END in
+        the last reply to indicate the end of the list.  If there are only
+        one reply the status is set to normal STATUS_OK.  If multiple Client
+        IDs was requested then each found and unfound client must cause
+        successful or error reply, respectively.
+
+        When querying clients the <entity's name> must include the client's
+        nickname in the following format: nickname[@server].  The
+        <info> must include the client's username and host in the following
+        format: username@host.
+
+        When querying servers the <entity's name> must include the server's
+        full name.  The <info> may be omitted.
+
+        When querying channels the <entity's name> must include the
+        channel's name.  The <info> may be omitted.
+
+        If the <count> option were defined in the query there will be only
+        <count> many replies from the server.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_LIST_START
+            SILC_STATUS_LIST_END
+            SILC_STATUS_ERR_NO_SUCH_NICK
+            SILC_STATUS_ERR_NO_SUCH_SERVER
+            SILC_STATUS_ERR_NO_SUCH_CHANNEL
+            SILC_STATUS_ERR_NO_SUCH_CLIENT_ID
+            SILC_STATUS_ERR_NO_SUCH_SERVER_ID
+            SILC_STATUS_ERR_NO_SUCH_CHANNEL_ID
+            SILC_STATUS_ERR_WILDCARDS
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+
+
+   4    SILC_COMMAND_NICK
+
+        Max Arguments:  1
+            Arguments:  (1) <nickname>
+
+        Set/change nickname.  This command is used to set nickname for
+        user.  See [SILC1] for definition of correctly formatted
+        nickname.
+
+        When nickname is changed new Client ID is generated.  Server MUST
+        distribute SILC_NOTIFY_TYPE_NICK_CHANGE to local clients on the
+        channels (if any) the client is joined on.  Then it MUST send
+        SILC_NOTIFY_TYPE_NICK_CHANGE notify to its primary route to
+        notify about nickname and Client ID change.
+
+        Reply messages to the command:
+
+        Max Arguments:  3
+            Arguments:  (1) <Status Payload>  (2) <New ID Payload>
+                        (3) <nickname>
+
+        This command replies always with <New ID Payload> that is
+        generated by the server every time user changes their nickname.
+        Client receiving this payload MUST start using the received
+        Client ID as its current valid Client ID.  The New ID Payload
+        is described in [SILC2].  The <nickname> is the user's new
+        nickname.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_WILDCARDS
+            SILC_STATUS_ERR_NICKNAME_IN_USE
+            SILC_STATUS_ERR_BAD_NICKNAME
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+
+
+   5    SILC_COMMAND_LIST
+
+        Max Arguments:  1
+            Arguments:  (1) [<Channel ID>]
+
+        The list command is used to list channels and their topics on the
+        current server.  If the <Channel ID> parameter is used, only the
+        status of that channel is displayed.  Secret channels are not
+        listed at all.  Private channels are listed with status indicating
+        that the channel is private.  Router MAY reply with all channels
+        it knows about.
+
+        Reply messages to the command:
+
+        Max Arguments:  5
+            Arguments:  (1) <Status Payload>  (2) <Channel ID>
+                        (3) <channel>         (4) [<topic>]
+                        (5) [<user count>]
+
+        This command may reply with several command reply messages to form
+        a list of results.  In this case the status payload will include
+        STATUS_LIST_START status in the first reply and STATUS_LIST_END in
+        the last reply to indicate the end of the list.  If there are only
+        one reply the status is set to normal STATUS_OK.
+
+        This command replies with Channel ID, name and the topic of the
+        channel.  If the channel is private channel the <topic> SHOULD
+        include the "*private*" string.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_LIST_START
+            SILC_STATUS_LIST_END
+            SILC_STATUS_ERR_WILDCARDS
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NO_SUCH_CHANNEL_ID
+            SILC_STATUS_ERR_NO_CHANNEL_ID
+            SILC_STATUS_ERR_NO_SUCH_SERVER
+
+
+   6    SILC_COMMAND_TOPIC
+
+        Max Arguments:  2
+            Arguments:  (1) <Channel ID>  (2) [<topic>]
+
+        This command is used to change or view the topic of a channel.
+        The topic for channel <Channel ID> is returned if there is no
+        <topic> given.  If the <topic> parameter is present, the topic
+        for that channel will be changed, if the channel modes permit
+        this action.
+
+        After setting the topic the server MUST send the notify type
+        SILC_NOTIFY_TYPE_TOPIC_SET to its primary router and then to
+        the channel which topic was changed.
+
+        Reply messages to the command:
+
+        Max Arguments:  2
+            Arguments:  (1) <Status Payload>  (2) <Channel ID>
+                        (3) [<topic>]
+
+        The command may reply with the topic of the channel if it is
+        set.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_ON_CHANNEL
+            SILC_STATUS_ERR_WILDCARDS
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_NO_SUCH_CHANNEL
+            SILC_STATUS_ERR_NO_SUCH_CHANNEL_ID
+            SILC_STATUS_ERR_NO_CHANNEL_ID
+            SILC_STATUS_ERR_BAD_CHANNEL_ID
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NO_CHANNEL_PRIV
+
+
+   7    SILC_COMMAND_INVITE
+
+        Max Arguments:  4
+            Arguments:  (1) <Channel ID>       (2) [<Client ID>]
+                        (3) [<add | del>]      (4) [<invite list>]
+
+        This command can be used to invite other clients to join to a
+        channel, and to manage the channel's invite list.  The <Client
+        ID> argument is the target client's ID that is being invited.
+        The <Channel ID> is the Channel ID of the requested channel.
+        The sender of this command MUST be on the channel.  The server
+        MUST also send the notify type SILC_NOTIFY_TYPE_INVITE to its
+        primary router and then to the client indicated by the <Client
+        ID>.
+
+        The <add | del> is an argument of size of 1 byte where 0x00 means
+        adding a client to invite list, and 0x01 means deleting a client
+        from invite list.  The <invite list>, if present, indicates
+        the information to be added to or removed from the invite list.
+        It may include a string for matching clients, public key of a
+        client (Public Key Payload) or Client ID of a client.  The
+        <invite list> is an Argument List Payload.
+
+        The following Argument Types has been defined for invite list
+        Argument Payloads:
+
+          0x01 - Argument is an invite string of following format:
+
+            [<nickname>[@<server>]!][<username>]@[<hostname or IP/MASK>]
+
+            The <hostname> may also be in format of IP/MASK to indicate
+            a network, for example 10.2.1.0/255.255.0.0.
+
+          0x02 - Argument is the public key of a client
+          0x03 - Argument is the Client ID of a client
+
+        If unknown type value is received or there is invalid amount of
+        Argument Payloads present in the list, the command MUST be
+        discarded.  When argument that is to be deleted from the invite
+        list does not exist in the list the argument is ignored.
+
+        When adding to or removing from the invite list the server MUST
+        send the notify type SILC_NOTIFY_TYPE_INVITE to its primary router.
+        When the SILC_CHANNEL_MODE_INVITE is set the client which executes
+        this command MUST have at least channel operator privileges to be
+        able to add to or remove from the invite list.  If this channel
+        mode is not set the list manipulation is allowed for all clients.
+        Wildcards MAY be used with this command.  When this command is
+        used to invite explicit client with <Client ID> the ID MUST be
+        added to the invite list by the server.
+
+        When this command is given with only <Channel ID> argument then
+        the command merely returns the invite list of the channel.   This
+        command MUST fail if the requested channel does not exist, the
+        requested <Client ID> is already on the channel or if the channel
+        is invite only channel and the caller of this command does not
+        have at least channel operator privileges on the channel.
+
+        Reply messages to the command:
+
+        Max Arguments:  3
+            Arguments:  (1) <Status Payload>  (2) <Channel ID>
+                        (3) [<invite list>]
+
+       This command replies with the invite list of the channel if it
+       exists.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NO_SUCH_CLIENT_ID
+            SILC_STATUS_ERR_NO_CLIENT_ID
+            SILC_STATUS_ERR_NO_SUCH_CHANNEL_ID
+            SILC_STATUS_ERR_NO_CHANNEL_ID
+            SILC_STATUS_ERR_NOT_ON_CHANNEL
+            SILC_STATUS_ERR_USER_ON_CHANNEL
+            SILC_STATUS_ERR_NO_CHANNEL_PRIV
+            SILC_STATUS_ERR_RESOURCE_LIMIT
+
+
+   8    SILC_COMMAND_QUIT
+
+        Max Arguments:  1
+            Arguments:  (1) [<quit message>]
+
+        This command is used by client to end SILC session.  The server
+        must close the connection to a client which sends this command.
+        if <quit message> is given it will be sent to other clients on
+        channel if the client is on channel when quitting.
+
+        Reply messages to the command:
+
+        This command does not reply anything.
+
+
+    9   SILC_COMMAND_KILL
+
+        Max Arguments:  3
+            Arguments:  (1) <Client ID>          (2) [<comment>]
+                        (3) [<auth payload>]
+
+        This command can be used by SILC operators to remove a client from
+        SILC network.  It also can be used by a normal client to remove
+        its own client from network by providing correct authentication
+        data.
+
+        Router operator killing a client:
+
+        The removing has temporary effects and client may reconnect to
+        SILC network.  The <Client ID> is the client to be removed from SILC.
+        The <comment> argument may be provided to give to the removed client
+        some information why it was removed from the network.  The killer
+        MUST have SILC operator privileges.
+
+        When killing a client the router MUST first send notify type
+        SILC_NOTIFY_TYPE_KILLED to all channels the client has joined.
+        The packet MUST NOT be sent to the killed client on the channels.
+        Then, the router MUST send the same notify type to its primary
+        router.  Finally, the router MUST send the same notify type
+        destined directly to the client which was killed.  The killed
+        client MUST also be removed from the invite lists of joined
+        channels if it is explicitly added in the invite lists.
+
+        Normal client killing by authentication:
+
+        When normal client executes this command the <Client ID> is the
+        destination client to be removed from the network.  The client
+        MUST provide the <auth payload> which includes a digital signature
+        that MUST be verified with the public key of the client indicated
+        by <Client ID>.  The <Client ID> MUST be local client to the server.
+        If the signature verification is successful the server sends
+        SILC_NOTIFY_TYPE_SIGNOFF to network and to the destination client.
+        The SILC_NOTIFY_TYPE_KILLED MUST NOT be used in this case.  If the
+        verification fails the destination client remains in network.
+        The hash function used in <auth payload> computing is selected
+        by user or SHA1 otherwise.
+
+        Reply messages to the command:
+
+        Max Arguments:  2
+            Arguments:  (1) <Status Payload>  (2) <Client ID>
+
+        This command returns with the requested Client ID.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_WILDCARDS
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NO_SUCH_CLIENT_ID
+            SILC_STATUS_ERR_NO_CLIENT_ID
+            SILC_STATUS_ERR_NO_ROUTER_PRIV
+
+
+   10   SILC_COMMAND_INFO
+
+        Max Arguments:  2
+            Arguments:  (1) [<server>]  (2) [<Server ID>]
+
+        This command is used to fetch various information about a server.
+        If <server> argument is specified the command MUST be sent to
+        the requested server.
+
+        If the <Server ID> is specified the server information if fetched
+        by the provided Server ID.  One of the arguments MUST always be
+        present.
+
+        Reply messages to the command:
+
+        Max Arguments:  4
+            Arguments:  (1) <Status Payload>  (2) <Server ID>
+                        (3) <server name>     (4) <string>
+
+        This command replies with the Server ID of the server and a
+        string which tells the information about the server.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_WILDCARDS
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NO_SUCH_SERVER
+            SILC_STATUS_ERR_NO_SUCH_SERVER_ID
+            SILC_STATUS_ERR_NO_SERVER_ID
+
+
+   11   SILC_COMMAND_STATS
+
+        Max Arguments:  1
+            Arguments:  (1) <Server ID>
+
+        This command is used to fetch various statistical information
+        from the server indicated by <Server ID>, which is the ID of
+        server where sender is connected to.  Server receiving this
+        command MAY also send this further to its router for fetching
+        other cell and network wide statistics to accompany the reply.
+
+        Reply messages to the command:
+
+        Max Arguments:  3
+            Arguments:  (1) <Status Payload>          (2) <Server ID>
+                        (3) [<statistics structure>]
+
+        This command replies with the Server ID of the server and
+        optional statistics structure which includes 32 bit MSB first
+        ordered integer values to represent various statistical
+        information.  The structure is as follows:
+
+          starttime      - time when server was started
+          uptime         - uptime of the server
+          my clients     - number of locally connected clients
+          my channels    - number of locally created channels
+          my server ops  - number of local server operators
+          my router ops  - number of local router operators
+          cell clients   - number of clients in local cell
+          cell channels  - number of channels in local cell
+          cell servers   - number of servers in local cell
+          clients        - number of client in SILC network
+          channels       - number of channels in SILC network
+          servers        - number of servers in SILC network
+          routers        - number of routers in SILC network
+          server ops     - number of server operators in SILC network
+          router ops     - number of router operators in SILC network
+
+        If some value is unknown it is set to zero (0) value.  The
+        "starttime" is the start time of the server, and is seconds
+        since Epoch (POSIX.1).  The "uptime" is time difference of
+        current time and "starttime" in the server, and is seconds
+        in value.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NO_SUCH_SERVER_ID
+            SILC_STATUS_ERR_NO_SUCH_SERVER
+            SILC_STATUS_ERR_NO_SERVER_ID
+
+
+   12   SILC_COMMAND_PING
+
+        Max Arguments:  1
+            Arguments:  (1) <Server ID>
+
+        This command is used by client and server to test the communication
+        channel to its server if one suspects that the communication is not
+        working correctly.  The <Server ID> is the ID of the server the
+        sender is connected to.
+
+        Reply messages to the command:
+
+        Max Arguments:  1
+            Arguments:  (1) <Status Payload>
+
+        This command replies only with Status Payload.  Server returns
+        SILC_STATUS_OK in Status Payload if pinging was successful.
+
+
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NO_SERVER_ID
+            SILC_STATUS_ERR_NO_SUCH_SERVER
+            SILC_STATUS_ERR_NOT_REGISTERED
+
+
+   13   SILC_COMMAND_OPER
+
+        Max Arguments:  2
+            Arguments:  (1) <username>  (2) <authentication payload>
+
+        This command is used by normal client to obtain server operator
+        privileges on some server or router.  Note that router operator
+        has router privileges that supersedes the server operator
+        privileges and this does not obtain those privileges.  Client
+        MUST use SILCOPER command to obtain router level privileges.
+
+        The <username> is the username set in the server configurations
+        as operator.  The <authentication payload> is the data that the
+        client is authenticated against.  It may be passphrase prompted
+        for user on client's screen or it may be public key authentication
+        based on digital signatures.  The public key used to verify the
+        signature should be locally saved in the server, and server should
+        not use public key received during the SKE to verify this signature.
+
+        After changing the mode the server MUST send the notify type
+        SILC_NOTIFY_TYPE_UMODE_CHANGE to its primary router.
+
+        Reply messages to the command:
+
+        Max Arguments:  1
+            Arguments:  (1) <Status Payload>
+
+        This command replies only with Status Payload.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_AUTH_FAILED
+
+
+   14   SILC_COMMAND_JOIN
+
+        Max Arguments:  7
+            Arguments:  (1) <channel>         (2) <Client ID>
+                        (3) [<passphrase>]    (4) [<cipher>]
+                        (5) [<hmac>]          (6) [<founder auth>]
+                        (7) [<channel auth>]
+
+        Join to channel/create new channel.  This command is used to
+        join to a channel.  If the channel does not exist the channel is
+        created.  If server is normal server this command MUST be sent
+        to router which will create the channel.  The channel MAY be
+        protected with passphrase.  If this is the case the passphrase
+        MUST be sent along the join command.  See the [SILC1] for
+        definition of correctly formatted channel name, <channel>.
+
+        The second argument <Client ID> is the Client ID of the client
+        which is joining to the client.  When client sends this command
+        to the server the <Client ID> MUST be the client's own ID.
+
+        Cipher to be used to secure the traffic on the channel MAY be
+        requested by sending the name of the requested <cipher>.  This
+        is used only if the channel does not exist and is created.  If
+        the channel already exists the cipher set previously for the
+        channel will be used to secure the traffic.  The computed MACs
+        of the channel message are produced by the default HMAC or by
+        the <hmac> provided for the command.
+
+        The <founder auth> is Authentication Payload providing the
+        authentication for gaining founder privileges on the channel
+        when joining the channel.  The client may provide this if it
+        knows that it is the founder of the channel and that the
+        SILC_CMODE_FOUNDER_AUTH mode is set on the channel.  The server
+        MUST verify whether the client is able to gain the founder
+        privileges the same way as the client had given the
+        SILC_COMMAND_CUMODE command to gain founder privileges.  The
+        client is still able to join the channel even if the founder
+        privileges could not be gained.  The hash function used with
+        the <founder payload> is selected by user or SHA1 otherwise.
+
+        If the <channel auth> is present and the channel mode
+        SILC_CMODE_CHANNEL_AUTH is set the server MUST verify the
+        <channel auth> with channel public key(s).  If public key that
+        can verify <channel auth> does not exist on the channel public
+        key list the client MUST NOT be allowed to join the channel.
+        Because more than one public key may be set on channel the
+        <channel auth> Authentication Payload's Public Data field
+        MUST include an indication of the public key to be used.  The
+        first 20 bytes of the Public Data field MUST be SHA-1 digest of
+        the public key that must be used in verification.  The digest
+        is the SILC Public Key fingerprint.  Rest of thePublic Data field
+        are set as defined in [SILC1].  This way server can determine from
+        the digest whether that public key exist on the channel and then
+        use that key in verification.  The hash function used with
+        <channel auth> is selected by user or SHA1 otherwise.
+
+        The server MUST check whether the user is allowed to join to
+        the requested channel.  Various modes set to the channel affect
+        the ability of the user to join the channel.  These conditions
+        are:
+
+            o  The user MUST be invited to the channel if the channel
+               is invite-only channel.
+
+            o  The Client ID/nickname/username/host name/public key
+               MUST NOT match any active bans.
+
+            o  The correct passphrase MUST be provided if passphrase
+               is set to the channel, and/or digital signature verification
+               with channel public key MUST be successful if public keys
+               has been set to the channel.
+
+            o  The user count limit, if set, MUST NOT be reached.
+
+        If the client provided correct <founder auth> payload it can
+        override these conditions, except the condition for the passphrase.
+        The correct passphrase MUST be provided even if <founder auth>
+        payload is provided.
+
+        Reply messages to the command:
+
+        Max Arguments:  17
+            Arguments:  (1) <Status Payload>        (2) <channel>
+                        (3) <Channel ID>            (4) <Client ID>
+                        (5) <channel mode mask>     (6) <created>
+                        (7) [<Channel Key Payload>] (8) [<ban list>]
+                        (9) [<invite list>]         (10) [<topic>]
+                        (11) [<hmac>]               (12) <list count>
+                        (13) <Client ID list>       (14) <client mode list>
+                        (15) [<founder pubkey>]     (16) [<channel pubkeys>]
+                        (17) [<user limit>]
+
+        This command replies with the channel name requested by the
+        client, channel ID of the channel and topic of the channel
+        if it exists.  The <Client ID> is the Client ID which was joined
+        to the channel.  It also replies with the channel mode mask
+        which tells all the modes set on the channel.  If the channel
+        is created the mode mask is zero (0) and <created> is 0x01.
+        If ban mask and/or invite list is set they are sent as well.
+        The <user limit> is the user limit on the channel, if one is set.
+
+        The <list count>, <Client ID list> and <client mode list> are
+        the clients currently on the channel and their modes on the
+        channel.  The <Client ID list> is formed by adding the ID Payloads
+        one after the other.  The <client mode list> is formed by adding
+        32 bit MSB first order values one after the other.  The <founder
+        pubkey> is the public key (or certificate) of the channel founder.
+        The <channel pubkeys> is Argument List Payload containing the
+        channel public keys that has been set for the channel.
+
+        Client receives the channel key in the reply message as well
+        inside <Channel Key Payload>.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_WILDCARDS
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_BAD_PASSWORD
+            SILC_STATUS_ERR_CHANNEL_IS_FULL
+            SILC_STATUS_ERR_NOT_INVITED
+            SILC_STATUS_ERR_BANNED_FROM_CHANNEL
+            SILC_STATUS_ERR_BAD_CHANNEL
+            SILC_STATUS_ERR_USER_ON_CHANNEL
+
+
+   15   SILC_COMMAND_MOTD
+
+        Max Arguments:  1
+            Arguments:  (1) <server>
+
+        This command is used to query the Message of the Day of the server.
+
+        Reply messages to the command:
+
+        Max Arguments:  3
+            Arguments:  (1) <Status Payload>  (2) <Server ID>
+                        (3) [<motd>]
+
+        This command replies with the motd message if it exists.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NO_SUCH_SERVER
+
+
+   16   SILC_COMMAND_UMODE
+
+        Max Arguments:  2
+            Arguments:  (1) <Client ID>  (2) [<client mode mask>]
+
+        This command is used by client to set/unset modes for itself.
+        However, there are some modes that the client MUST NOT set itself,
+        but they will be set by server.  However, client MAY unset any
+        mode.  Modes may be masked together ORing them thus having
+        several modes set.  Client MUST keep its client mode mask
+        locally so that the mode setting/unsetting would work without
+        problems.  Client may change only its own modes.
+
+        After changing the mode server MUST send the notify type
+        SILC_NOTIFY_TYPE_UMODE_CHANGE to its primary router.
+
+        The following client modes are defined:
+
+           0x00000000    SILC_UMODE_NONE
+
+              No specific mode for client.  This is the initial
+              setting when new client is created.  The client is
+              normal client and is present in the network.
+
+
+           0x00000001    SILC_UMODE_SERVER_OPERATOR
+
+              Marks the user as server operator.  Client MUST NOT
+              set this mode itself.  Server sets this mode to the
+              client when client attains the server operator
+              privileges by SILC_COMMAND_OPER command.  Client
+              MAY unset the mode itself.
+
+
+           0x00000002    SILC_UMODE_ROUTER_OPERATOR
+
+              Marks the user as router (SILC) operator.  Client
+              MUST NOT set this mode itself.  Router sets this mode
+              to the client when client attains the router operator
+              privileges by SILC_COMMAND_SILCOPER command.  Client
+              MAY unset the mode itself.
+
+
+           0x00000004    SILC_UMODE_GONE
+
+              Marks that the user is not currently present in the
+              SILC Network.  Client MAY set and unset this mode.
+
+
+           0x00000008    SILC_UMODE_INDISPOSED
+
+              Marks that the user is currently indisposed and may
+              not be able to receive any messages, and that user may
+              not be present in the network.  Client MAY set and
+              unset this mode.
+
+
+           0x00000010    SILC_UMODE_BUSY
+
+              Marks that the user is currently busy and may not
+              want to receive any messages, and that user may not
+              be present in the network.  Client MAY set and unset
+              this mode.
+
+
+           0x00000020    SILC_UMODE_PAGE
+
+              User is not currently present or is unable to receive
+              messages, and prefers to be paged in some mechanism
+              if the user needs to be reached.  Client MAY set and
+              unset this mode.
+
+
+           0x00000040    SILC_UMODE_HYPER
+
+              Marks that the user is hyper active and is eager to
+              receive and send messages.   Client MAY set and unset
+              this mode.
+
+
+           0x00000080    SILC_UMODE_ROBOT
+
+              Marks that the client is actually a robot program.
+              Client MAY set and unset this mode.
+
+
+           0x00000100    SILC_UMODE_ANONYMOUS
+
+              Marks that the client is anonymous client.  Server
+              that specifically is designed for anonymous services
+              can set and unset this mode.  Client MUST NOT set or
+              unset this mode itself.  A client with this mode set
+              would have the username and the hostname information
+              scrambled by the server which set this mode.
+
+
+           0x00000200    SILC_UMODE_BLOCK_PRIVMSG
+
+              Marks that the client wishes to block private
+              messages sent to the client, unless the Private
+              Message Key flag is set in the SILC packet header.
+              If this mode is set server MUST NOT deliver private
+              messages to the client without the Private Message
+              Key flag being set.  The Private Message Key flag set
+              indicates that the private message is protected with
+              a key shared between the sender and the recipient.
+
+              A separate service could provide additional filtering
+              features for accepting private messages from certain
+              sender.  However, this document does not specify such
+              service.
+
+              The client MAY set and unset this mode.
+
+
+           0x00000400    SILC_UMODE_DETACHED
+
+              Marks that the client is detached from the SILC network.
+              This means that the actual network connection to the
+              client is lost but the client entry is still valid.  The
+              detached client can be resumed at a later time.  This
+              mode MUST NOT be set by client.  It can only be set when
+              client has issued command SILC_COMMAND_DETACH.  The server
+              sets this mode.  This mode cannot be unset with this
+              command.  It is unset when the client is resuming back to
+              the network and SILC_PACKET_RESUME_CLIENT packet is
+              received.
+
+              This flag MUST NOT be used to determine whether a packet
+              can be sent to the client or not.  Only the server that
+              had the original client connection can make the decision
+              by knowing that the network connection is not active.
+              In this case the default case is to discard the packet.
+
+
+           0x00000800    SILC_UMODE_REJECT_WATCHING
+
+              Marks that the client rejects that it could be watched
+              by someone else.  If this mode is set notifications about
+              this client is not send, even if someone is watching the
+              same nickname this client has.  Client MAY set and unset
+              this mode.  Any changes for this client MUST NOT be
+              notified to any watcher when this mode is set.
+
+              A separate service could provide additional filtering
+              features for rejecting and accepting the watching from
+              certain users.  However, this document does not specify
+              such service.
+
+
+           0x00001000    SILC_UMODE_BLOCK_INVITE
+
+              Marks that the client wishes to block incoming invite
+              notifications.  Client MAY set and unset this mode.
+              When set server does not deliver invite notifications
+              to the client.  Note that this mode may make it harder
+              to join invite-only channels.
+
+        If the <client mode mask> was not provided this command merely
+        returns the mode mask to the client.
+
+
+        Reply messages to the command:
+
+        Max Arguments:  2
+            Arguments:  (1) <Status Payload>  (2) <client mode mask>
+
+        This command replies with the changed client mode mask that
+        the client MUST to keep locally.
+
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NO_SUCH_CLIENT_ID
+            SILC_STATUS_ERR_BAD_CLIENT_ID
+            SILC_STATUS_ERR_NOT_YOU
+            SILC_STATUS_ERR_PERM_DENIED
+            SILC_STATUS_ERR_UNKNOWN_MODE
+            SILC_STATUS_ERR_NO_CLIENT_ID
+
+
+   17   SILC_COMMAND_CMODE
+
+        Max Arguments:  9
+            Arguments:  (1) <Channel ID>      (2) [<channel mode mask>]
+                        (3) [<user limit>]    (4) [<passphrase>]
+                        (5) [<cipher>]        (6) [<hmac>]
+                        (7) [<auth payload>]  (8) [<founder pubkey>]
+                        (9) [<channel pubkey>]
+
+        This command is used by client to set or change channel flags on
+        a channel.  Channel has several modes that set various properties
+        of a channel.  Modes may be masked together by ORing them thus
+        having several modes set.  The <Channel ID> is the ID of the
+        target channel.  The client changing channel mode MUST be on
+        the same channel and posses sufficient privileges to be able to
+        change the mode.
+
+        When the mode is changed SILC_NOTIFY_TYPE_CMODE_CHANGE notify
+        type MUST be distributed to the channel.
+
+        The following channel modes are defined:
+
+           0x00000000    SILC_CMODE_NONE
+
+              No specific mode on channel.  This is the default when
+              channel is created.  This means that channel is just plain
+              normal channel.
+
+
+           0x00000001    SILC_CMODE_PRIVATE
+
+              Channel is private channel.  Private channels are shown
+              in the channel list listed with SILC_COMMAND_LIST command
+              with indication that the channel is private.  Also,
+              client on private channel will no be detected to be on
+              the channel as the channel is not shown in the client's
+              currently joined channel list.  Channel founder and
+              channel operator MAY set/unset this mode.
+
+
+           0x00000002    SILC_CMODE_SECRET
+
+              Channel is secret channel.  Secret channels are not shown
+              in the list listed with SILC_COMMAND_LIST command.  Secret
+              channels can be considered to be invisible channels.
+              Channel founder and channel operator MAY set/unset this
+              mode.
+
+
+           0x00000004    SILC_CMODE_PRIVKEY
+
+              Channel uses private channel key to protect the traffic
+              on the channel.  When this mode is set the client will be
+              responsible to set the key it wants to use to encrypt and
+              decrypt the traffic on channel.  Server generated channel
+              keys are not used at all.  This mode provides additional
+              security as clients on channel may agree to use private
+              channel key that even servers do not know.  Naturally,
+              this requires that every client on the channel knows
+              the key before hand (it is considered to be pre-shared-
+              key).  The key material SHOULD be processed as stated
+              in the [SILC3] in the section Processing the Key Material.
+
+              As it is local setting it is possible to have several
+              private channel keys on one channel.  In this case several
+              clients can talk on same channel but only those clients
+              that share the key with the message sender will be able
+              to hear the talking.  Client SHOULD NOT display those
+              message for the end user that it is not able to decrypt
+              when this mode is set.
+
+              Only channel founder MAY set/unset this mode.  If this
+              mode is unset the server will distribute new channel
+              key to all clients on the channel which will be used
+              thereafter.
+
+
+           0x00000008    SILC_CMODE_INVITE
+
+              Channel is invite only channel.  Client may join to this
+              channel only if it is invited to the channel.  Channel
+              founder and channel operator MAY set/unset this mode.
+
+
+           0x00000010    SILC_CMODE_TOPIC
+
+              The topic of the channel may only be set by client that
+              is channel founder or channel operator.  Normal clients
+              on channel will not be able to set topic when this mode
+              is set.  Channel founder and channel operator MAY set/
+              unset this mode.
+
+
+           0x00000020    SILC_CMODE_ULIMIT
+
+              User limit has been set to the channel.  New clients
+              may not join to the channel when the limit set is
+              reached.  Channel founder and channel operator MAY set/
+              unset the limit.  The <user limit> argument is the
+              number of limited users.
+
+
+           0x00000040    SILC_CMODE_PASSPHRASE
+
+              Passphrase has been set to the channel.  Client may
+              join to the channel only if it is able to provide the
+              correct passphrase.  Setting passphrases to channel
+              is entirely safe as all commands are protected in the
+              SILC network.  Only channel founder MAY set/unset
+              the passphrase.  The <passphrase> argument is the
+              set passphrase.
+
+
+           0x00000080    SILC_CMODE_CIPHER
+
+              Sets specific cipher to be used to protect channel
+              traffic.  The <cipher> argument is the requested cipher.
+              When set or unset the server must re-generate new
+              channel key.  Only channel founder MAY set the cipher of
+              the channel.  When unset the new key is generated using
+              default cipher for the channel.
+
+
+           0x00000100    SILC_CMODE_HMAC
+
+              Sets specific hmac to be used to compute the MACs of the
+              channel message.  The <hmac> argument is the requested hmac.
+              Only channel founder may set the hmac of the channel.
+
+
+           0x00000200    SILC_CMODE_FOUNDER_AUTH
+
+              Channel founder may set this mode to be able to regain
+              channel founder rights even if the client leaves the
+              channel.  The <auth payload> is the Authentication Payload
+              consisting of the public key authentication method and the
+              digital signature for that method.  The passphrase or NONE
+              authentication methods MUST NOT be accepted.
+
+              The server does not save <auth payload> but MUST verify it.
+              The public key used to verify the payload is the <founder
+              pubkey> if present, or the public key of the client sending
+              this command.  If <founder pubkey> is present also that
+              public key MUST be saved as founder's public key.  This
+              mode may be set only if the <auth payload> was verified
+              successfully.  The hash function used with the <auth
+              payload> is selected by user or SHA1 otherwise.
+
+              The public key of the founder is sent in the
+              SILC_NOTIFY_TYPE_CMODE_CHANGE notify type so that other
+              routers and servers in the network may save the public key.
+              This way the founder can reclaim the founder rights back
+              to the channel from any server in the network.  The founder
+              rights can be regained by the SILC_CUMODE_FOUNDER channel
+              user mode, or during joining procedure with the command
+              SILC_COMMAND_JOIN.
+
+              If this mode is already set but the <founder pubkey> is
+              different the new key will replace the old founder key and
+              the new key is distributed in the network with the
+              SILC_NOTIFY_TYPE_CMODE_CHANGE notify.  Only the original
+              founder may set this mode multiple times and the client
+              MUST have SILC_CUMODE_FOUNDER mode on the channel.
+
+              When this channel mode is set the channel also becomes
+              permanent.  If all clients leave the channel while this
+              mode is set the channel MUST NOT be destroyed.  The founder
+              can reclaim the founder mode back on these empty channels
+              at any time.  Implementations MAY limit the number of how
+              many channels a user can own and how long they remain
+              persistent.
+
+
+           0x00000400    SILC_CMODE_SILENCE_USERS
+
+              Channel founder may set this mode to silence normal users
+              on the channel.  Users with operator privileges are not
+              affected by this mode.  Messages sent by normal users
+              are dropped by servers when this mode is set.  This mode
+              can be used to moderate the channel.  Only channel founder
+              may set/unset this mode.
+
+
+           0x00000800    SILC_CMODE_SILENCE_OPERS
+
+              Channel founder may set this mode to silence operators
+              on the channel.  When used with SILC_CMODE_SILENCE_USERS
+              mode this can be used to set the channel in state where only
+              the founder of the channel may send messages to the channel.
+              Messages sent by operators are dropped by servers when this
+              mode is set.  Only channel founder may set/unset this mode.
+
+
+           0x00001000    SILC_CMODE_CHANNEL_AUTH
+
+              When this mode is set the channel has one or more public keys
+              or certificates set, and ability to join the channel requires
+              a client to provide digital signature that can be successfully
+              verified with one of the channel public keys.  This mode is
+              equivalent to the SILC_MODE_PASSPHRASE except that digital
+              signatures are used to gain access to the channel.  Both
+              modes MAY be set at the same time.  Channel founder may set
+              and unset this mode.
+
+              The <channel pubkey> argument is an Argument List Payload
+              where each argument is Public Key Payload including public
+              key to be added or removed from the channel public key list.
+              To add a public key to channel this mode is set and the
+              argument type is 0x00, and the argument is the public key.
+              To remove a public key from channel public key list the
+              argument type is 0x01, and the argument is the public key
+              to be removed from the list.  To remove all public keys at
+              once this mode is unset.  An implementation MAY limit the
+              number of public keys that can be set for the channel.
+              This mode MUST NOT be set if <channel pubkey> is not present
+              when the mode is set for the first time.  Implementation MAY
+              add and remove multiple public keys at the same time by
+              including multiple arguments to the <channel pubkey>
+              Argument List Payload.
+
+
+        To make the mode system work, client MUST keep the channel mode
+        mask locally so that the mode setting and unsetting would work
+        without problems.  The client receives the initial channel mode
+        mask when it joins to the channel.  When the mode changes on
+        channel the server MUST distribute the changed channel mode mask
+        to all clients on the channel by sending the notify type
+        SILC_NOTIFY_TYPE_CMODE_CHANGE.  The notify type MUST also be sent
+        to the server's primary router.  If the <channel mode mask> was
+        not provided this command returns the mode mask, founder key,
+        channel public key list and the current user limit to the client.
+
+        Reply messages to the command:
+
+        Max Arguments:  6
+            Arguments:  (1) <Status Payload>    (2) <Channel ID>
+                        (3) <channel mode mask> (4) [<founder pubkey>]
+                        (5) [<channel pubkeys>] (6) [<user limit>]
+
+        This command replies with the changed channel mode mask that
+        client MUST keep locally.  It may also return the channel
+        founder's public key if it is set.  It may also return list of
+        channel public keys when the list was altered.  The <channel
+        pubkeys> is Argument List Payload and each argument includes
+        one public key.  The <user limit> is the current user limit
+        on the channel, if one is set.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NOT_ON_CHANNEL
+            SILC_STATUS_ERR_NO_SUCH_CHANNEL_ID
+            SILC_STATUS_ERR_BAD_CHANNEL_ID
+            SILC_STATUS_ERR_NO_CHANNEL_ID
+            SILC_STATUS_ERR_NO_CHANNEL_PRIV
+            SILC_STATUS_ERR_NO_CHANNEL_FOPRIV
+            SILC_STATUS_ERR_UNKNOWN_MODE
+            SILC_STATUS_ERR_NO_SUCH_CLIENT_ID
+            SILC_STATUS_ERR_AUTH_FAILED
+
+
+   18   SILC_COMMAND_CUMODE
+
+        Max Arguments:  4
+            Arguments:  (1) <Channel ID>    (2) <mode mask>
+                        (3) <Client ID>     (4) [<auth payload>]
+
+        This command is used by client to change channel user modes on
+        channel.  Users on channel may have some special modes and this
+        command is used by channel operators to set or change these modes.
+        The <Channel ID> is the ID of the target channel.  The <mode mask>
+        is OR'ed mask of modes.  The <Client ID> is the target client.
+        The client changing channel user modes MUST be on the same channel
+        as the target client and posses sufficient privileges to be able to
+        change the mode.
+
+        When the mode is changed SILC_NOTIFY_TYPE_CUMODE_CHANGE notify
+        type is distributed to the channel.
+
+        The following channel modes are defined:
+
+           0x00000000    SILC_CUMODE_NONE
+
+              No specific mode.  This is the normal situation for client.
+              Also, this is the mode set when removing all modes from
+              the target client.
+
+
+           0x00000001    SILC_CUMODE_FOUNDER
+
+              The client is channel founder of the channel.  Usually this
+              mode is set only by the server when the channel was created.
+              However, if the SILC_CMODE_FOUNDER_AUTH channel mode has
+              been set, the client can claim channel founder privileges
+              by providing the <auth payload> that the server will use
+              to authenticate the client.  The public key that server will
+              use to verify the <auth payload> MUST be the same public key
+              that was saved when the SILC_CMODE_FOUNDER_AUTH channel
+              mode was set.  The client MAY remove this mode at any time.
+
+
+           0x00000002    SILC_CUMODE_OPERATOR
+
+              Sets channel operator privileges on the channel for a
+              client on the channel.  Channel founder and channel operator
+              MAY set/unset this mode.  The client MAY remove this mode
+              at any time.
+
+
+           0x00000004    SILC_CUMODE_BLOCK_MESSAGES
+
+              Marks that the client wishes not to receive any channel
+              messages sent for the channel.  Client MAY set and unset
+              this mode to itself.  Client MUST NOT set it to anyone else.
+              When this mode is set server MUST NOT deliver channel
+              messages to this client.  Other packets such as channel
+              key packets are still sent to the client.
+
+              A separate service could provide additional filtering
+              features for accepting channel messages from certain
+              sender.  However, this document does not specify such
+              service.
+
+
+           0x00000008    SILC_CUMODE_BLOCK_MESSAGES_USERS
+
+              Marks that the client wishes not to receive any channel
+              messages sent from normal users.  Only messages sent by
+              channel founder or channel operator is accepted.  Client
+              MAY set and unset this mode to itself.  Client MUST NOT
+              set it to anyone else.  When this mode is set server MUST
+              NOT deliver channel messages that are sent by normal users
+              to this client.
+
+              A separate service could provide additional filtering
+              features for accepting channel messages from certain
+              sender.  However, this document does not specify such
+              service.
+
+
+           0x00000010    SILC_CUMODE_BLOCK_MESSAGES_ROBOTS
+
+              Marks that the client wishes not to receive any channel
+              messages sent from robots.  Messages sent by users with
+              the SILC_UMODE_ROBOT user mode set are not delivered.
+              Client MAY set and unset this mode to itself.  Client MUST
+              NOT set it to anyone else.  When this mode is set server
+              MUST NOT deliver channel messages that are sent by robots
+              to this client.
+
+
+           0x00000020    SILC_CUMODE_QUIET
+
+              Marks that the client cannot talk on the channel.  This
+              mode can be set by channel operator or channel founder to
+              some other user that is not operator or founder.  The
+              target client MUST NOT unset this mode.  When this mode
+              is set the server MUST drop messages sent by this client
+              to the channel.
+
+
+        Reply messages to the command:
+
+        Max Arguments:  4
+            Arguments:  (1) <Status Payload>  (2) <channel user mode mask>
+                        (3) <Channel ID>      (4) <Client ID>
+
+        This command replies with the changed channel user mode mask that
+        client MUST keep locally. The <Channel ID> is the specified
+        channel.  The <Client ID> is the target client.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NOT_ON_CHANNEL
+            SILC_STATUS_ERR_NO_SUCH_CHANNEL_ID
+            SILC_STATUS_ERR_BAD_CHANNEL_ID
+            SILC_STATUS_ERR_NO_CHANNEL_ID
+            SILC_STATUS_ERR_NO_CHANNEL_PRIV
+            SILC_STATUS_ERR_NO_CHANNEL_FOPRIV
+            SILC_STATUS_ERR_UNKNOWN_MODE
+            SILC_STATUS_ERR_NO_SUCH_CLIENT_ID
+            SILC_STATUS_ERR_AUTH_FAILED
+
+
+   19   SILC_COMMAND_KICK
+
+        Max Arguments:  3
+            Arguments:  (1) <Channel ID>      (2) <Client ID>
+                        (3) [<comment>]
+
+        This command is used by channel operators to remove a client from
+        channel.  The <channel> argument is the channel the client to be
+        removed is on currently.  Note that the "kicker" must be on the same
+        channel.  If <comment> is provided it will be sent to the removed
+        client.
+
+        After kicking the client the server MUST send the notify type
+        SILC_NOTIFY_TYPE_KICKED to the channel and to its primary router.
+        The client is removed from the channel after sending this notify.
+        The kicked client MUST be removed from the invite list of the
+        channel if it is explicitly added in the list.  The channel key
+        MUST also be re-generated after kicking, unless the
+        SILC_CMODE_PRIVKEY mode is set.
+
+        Reply messages to the command:
+
+        Max Arguments:  3
+            Arguments:  (1) <Status Payload>  (2) <Channel ID>
+                        (3) <Client ID>
+
+        This command returns the Channel ID and Client ID that was kicked
+        from the channel.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NO_SUCH_CHANNEL
+            SILC_STATUS_ERR_NO_SUCH_CLIENT_ID
+            SILC_STATUS_ERR_NO_CHANNEL_PRIV
+            SILC_STATUS_ERR_NO_CLIENT_ID
+
+
+
+   20   SILC_COMMAND_BAN
+
+        Max Arguments:  3
+            Arguments:  (1) <Channel ID>         (2) [<add | del>]
+                        (3) [<ban list>]
+
+        This command is used to manage the ban list of the channel
+        indicated by the <Channel ID>.  A client that is banned from
+        channel is no longer able to join the channel.  The client which
+        is executing this command MUST have at least channel operator
+        privileges on the channel.
+
+        The <add | del> is an argument of size of 1 byte where 0x00 means
+        adding a client to ban list, and 0x01 means deleting a client
+        from ban list.  The <ban list>, if present, indicates the
+        information to be added to or removed from the ban list.  It
+        may include a string for matching clients, public key of a
+        client (Public Key Payload) or Client ID of a client.  The
+        <ban list> is an Argument List Payload.
+
+        The following Argument Types has been defined for ban list
+        Argument Payloads:
+
+          0x01 - Argument is an ban string of following format:
+
+            [<nickname>[@<server>]!][<username>]@[<hostname or IP/MASK>]
+
+            The <hostname> may also be in format of IP/MASK to indicate
+            a network.
+
+          0x02 - Argument is the public key of a client
+          0x03 - Argument is the Client ID of a client
+
+        If unknown type value is received or there is invalid amount of
+        Argument Payloads present in the list, the command MUST be
+        discarded.  When argument that is to be deleted from the ban
+        list does not exist in the list the argument is ignored.
+
+        The server MUST send the notify type SILC_NOTIFY_TYPE_BAN to its
+        primary router after adding to or removing from the ban list.
+        The wildcards MAY be used with this command.  If this command
+        is executed without the ban arguments the command merely replies
+        with the current ban list.
+
+        Reply messages to the command:
+
+        Max Arguments:  3
+            Arguments:  (1) <Status Payload>  (2) <Channel ID>
+                        (3) [<ban list>]
+
+        This command replies with the <Channel ID> of the channel and
+        the current <ban list> of the channel if it exists.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NO_SUCH_CHANNEL_ID
+            SILC_STATUS_ERR_NO_CHANNEL_ID
+            SILC_STATUS_ERR_NOT_ON_CHANNEL
+            SILC_STATUS_ERR_NO_CHANNEL_PRIV
+            SILC_STATUS_ERR_RESOURCE_LIMIT
+
+
+
+
+   21   SILC_COMMAND_DETACH
+
+        Max Arguments:  0
+            Arguments:
+
+        This command is used to detach from the network.  Client can
+        send this command to its server to indicate that it will be
+        detached.  By detaching the client remains in the network but
+        the actual network connection to the server is closed.  The
+        client may then later resume the old session back.
+
+        When this command is received the server MUST check that the
+        client is locally connected client, and set the user mode
+        SILC_UMODE_DETACHED flag.  The SILC_NOTIFY_TYPE_UMODE_CHANGE
+        MUST be also sent to routers.  The server then sends command
+        reply to this command and closes the network connection.
+        The server MUST NOT remove the client from its lists, or send
+        any signoff notifications for this client.  See the [SILC1]
+        for detailed information about detaching.
+
+        Reply messages to the command:
+
+        Max Arguments:  1
+            Arguments:  (1) <Status Payload>
+
+        This command replies only with the status indication.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_REGISTERED
+
+
+
+   22   SILC_COMMAND_WATCH
+
+        Max Arguments:  4
+            Arguments:  (1) <Client ID>       (2) [<add nickname>]
+                        (3) [<del nickname>]  (4) [<public key>]
+
+        This command is used to set up a watch for <add nickname>
+        nickname.  When a user in the network appears with the
+        nickname, or signoffs the network or user's mode is changed
+        the client which set up the watch will be notified about
+        this change.  This can be used to watch for certain nicknames
+        in the network and receive notifications when for example a
+        friend appears in the network or leaves the network.
+
+        The <del nickname> is a nickname that has been previously
+        added to watch list and is now removed from it.  Notifications
+        for that nickname will not be delivered anymore.  The nickname
+        set to watch MUST NOT include any wildcards.  Note also that a
+        nickname may match several users since nicknames are not unique.
+        Implementations MAY set limits for how many nicknames client
+        can watch.
+
+        OPTIONALLY this command may also be set to watch clients' actions
+        in the network using their public key or certificate.  The
+        <public key> MAY be present, and it is an Argument List Payload
+        where each argument is a Public Key Payload including public key
+        to be added or removed from the watch list.  To To add a public
+        key to watch list the argument type is 0x00, and the argument is
+        the public key.  To remove a public key from watch list list the
+        argument type is 0x01, and the argument is the public key to be
+        removed from the list.  An implementation MAY limit the number of
+        public keys that can be set on the watch list.  Implementation MAY
+        add and remove multiple public keys at the same time by including
+        multiple arguments to the <public key> Argument List Payload.
+
+        The <Client ID> is the Client ID of the sender of this command.
+
+        When normal server receives this command from client it
+        MUST send it to its router.  Router will process the command
+        and actually keeps the watch list.
+
+        Reply messages to the command:
+
+        Max Arguments:  1
+            Arguments:  (1) <Status Payload>
+
+        This command replies only with the status indication.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_BAD_NICKNAME
+            SILC_STATUS_ERR_WILDCARDS
+            SILC_STATUS_ERR_RESOURCE_LIMIT
+            SILC_STATUS_ERR_NO_SUCH_NICK
+            SILC_STATUS_ERR_NICKNAME_IN_USE
+
+
+   23   SILC_COMMAND_SILCOPER
+
+        Max Arguments:  2
+            Arguments:  (1) <username>  (2) <authentication payload>
+
+        This command is used by normal client to obtain router operator
+        privileges (also known as SILC operator) on the router.  Note
+        that router operator has privileges that supersedes the server
+        operator privileges.
+
+        The <username> is the username set in the server configurations
+        as operator.  The <authentication payload> is the data that the
+        client is authenticated against.  It may be passphrase prompted
+        for user on client's screen or it may be public key or certificate
+        authentication data (data signed with private key).  The public
+        key that router will use to verify the signature found in the
+        payload should be verified.  It is recommended that the public
+        key is saved locally in the router and router would not use
+        any public keys received during the SKE.
+
+        Difference between router operator and server operator is that
+        router operator is able to handle cell level properties while
+        server operator (even on router server) is able to handle only
+        local properties, such as, local connections and normal server
+        administration.  The router operator is also able to use the
+        SILC_COMMAND_KILL command.
+
+        After changing the mode server MUST send the notify type
+        SILC_NOTIFY_TYPE_UMODE_CHANGE to its primary router.
+
+        Reply messages to the command:
+
+        Max Arguments:  1
+            Arguments:  (1) <Status Payload>
+
+        This command replies only with Status Payload.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_AUTH_FAILED
+
+
+
+
+   24   SILC_COMMAND_LEAVE
+
+        Max Arguments:  1
+            Arguments:  (1) <Channel ID>
+
+        This command is used by client to leave a channel the client is
+        joined to.
+
+        When leaving channel the server MUST send the notify type
+        SILC_NOTIFY_TYPE_LEAVE to its primary router and to the channel.
+        The channel key MUST also be re-generated when leaving the channel
+        and distribute it to all clients still currently on the channel.
+        The key MUST NOT be re-generated if the SILC_CMODE_PRIVKEY mode
+        is set.
+
+        Reply messages to the command:
+
+        Max Arguments:  2
+            Arguments:  (1) <Status Payload>  (2) <Channel ID>
+
+        The <Channel ID> is the ID of left channel.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NO_SUCH_CHANNEL_ID
+            SILC_STATUS_ERR_BAD_CHANNEL_ID
+            SILC_STATUS_ERR_NO_CHANNEL_ID
+
+
+   25   SILC_COMMAND_USERS
+
+        Max Arguments:  2
+            Arguments:  (1) [<Channel ID>]  (2) [<channel name>]
+
+        This command is used to list user names currently on the requested
+        channel; either the argument <Channel ID> or the <channel name>.
+        One of these arguments must be present.  The server MUST resolve
+        the joined clients and reply with a lists of users on the channel
+        and with list of user modes on the channel.
+
+        If the requested channel is a private or secret channel, this
+        command MUST NOT send the list of users, except if the sender is
+        on the channel, or the sender is a server.  Otherwise, error is
+        returned to the sender.
+
+        Reply messages to the command:
+
+        Max Arguments:  5
+            Arguments:  (1) <Status Payload>  (2) <Channel ID>
+                        (3) <list count>      (4) <Client ID list>
+                        (5) <client mode list>
+
+        This command replies with the Channel ID of the requested channel
+        Client ID list of the users on the channel and list of their modes.
+        The Client ID list has Client ID's of all users in the list.  The
+        <Client ID list> is formed by adding Client ID's one after another.
+        The <client mode list> is formed by adding client's user modes on
+        the channel one after another (4 bytes (32 bits) each).  The <list
+        count> of length of 4 bytes (32 bits), tells the number of entries
+        in the lists.  Both lists MUST have equal number of entries.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NO_SUCH_CHANNEL_ID
+            SILC_STATUS_ERR_BAD_CHANNEL_ID
+            SILC_STATUS_ERR_NO_CHANNEL_ID
+            SILC_STATUS_ERR_NOT_ON_CHANNEL
+
+
+   26   SILC_COMMAND_GETKEY
+
+        Max Arguments:  1
+            Arguments:  (1) <ID Payload>
+
+        This command is used to fetch the public key of the client or
+        server indicated by the <ID Payload>.  The public key is fetched
+        from the server where to the client is connected.
+
+        Reply messages to the command:
+
+        Max Arguments:  3
+            Arguments:  (1) <Status Payload>      (2) <ID Payload>
+                        (3) [<Public Key Payload>]
+
+        This command replies with the client's or server's ID and with
+        the <Public Key Payload>.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NO_SUCH_CLIENT_ID
+            SILC_STATUS_ERR_NO_SUCH_SERVER_ID
+
+
+   27   SILC_COMMAND_SERVICE
+
+        Max Arguments:  256
+            Arguments:  (1) [<service name>]    (2) [<auth payload>]
+                        (n) [...]
+
+        This command is used to negotiate a service agreement with a
+        remote server.  If this command is given without arguments it
+        MAY return the service list, if it is publicly available.  The
+        <service name> is a service specific identifier, and the
+        <auth payload> MAY be used to authenticate the requester to the
+        remote service.  The authentication to a service may be based
+        on previous agreement with the requester and the service
+        provider.  The command MAY also take additional service
+        specific arguments.
+
+        This document does not specify any services.  How the services
+        are configured and put available in a server is also out of
+        scope of this document.
+
+        This command MAY be used by client to start using some service
+        in a server, but it also MAY be used by server to negotiate
+        to start using a service in some other server or router.
+
+        After the negotiation is done both of the parties need to know
+        from the service identifier how the service can be used.  The
+        service can be considered to be a protocol which both of the
+        parties need to support.
+
+        Reply messages to the command:
+
+        Max Arguments:  256
+            Arguments:  (1) <Status Payload>      (2) [<service list>]
+                        (3) [<service name>]      (n) [...]
+
+
+        This command MAY reply with the <service list> when command is
+        given without arguments, and the list is a comma separated list
+        of service identifiers.  The <service name> is the service that
+        the sender requested and this is provided when the server has
+        accepted the sender to use the <service name>.  The command
+        reply MAY also have additional service specific arguments.
+
+        Status messages:
+
+            SILC_STATUS_OK
+            SILC_STATUS_ERR_NOT_REGISTERED
+            SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+            SILC_STATUS_ERR_TOO_MANY_PARAMS
+            SILC_STATUS_ERR_NO_SUCH_SERVICE
+            SILC_STATUS_ERR_AUTH_FAILED
+            SILC_STATUS_ERR_PERM_DENIED
+
+
+
+   28 - 199
+
+        Currently undefined commands.
+
+
+   200 - 254
+
+        These commands are reserved for private use and will not be defined
+        in this document.
+
+
+   255  SILC_COMMAND_MAX
+
+        Reserved command.  This must not be sent.
+.in 3
+
+
+.ti 0
+2.4 SILC Command Status Payload
+
+Command Status Payload is sent in command reply messages to indicate
+the status of the command.  The payload is one of argument in the
+command thus this is the data area in Command Argument Payload described
+in [SILC2].  The payload is only 2 bytes in length.  The following
+diagram represents the Command Status Payload (fields are always in
+MSB first order).
+
+
+.in 21
+.nf
+                     1
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|     Status    |     Error     |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+.in 3
+
+.ce
+Figure 6:  SILC Command Status Payload
+
+
+.in 6
+o Status (1 byte) - Indicates the status message type,
+  error, start of list, entry of list or end of list.
+
+o Error (1 byte) - Indicates the error if the Status
+  field is some list status, which means there are list
+  of errors.
+.in 3
+
+The values in Status and Error fields are set according
+the following rules:
+
+.in 6
+o If there is single reply and error has not occurred
+  then Status field includes value SILC_STATUS_OK, and
+  the Error field MUST be ignored (and set to zero
+  value).
+
+o If there is single error, then Status field includes
+  one of the error values, and the Error field MUST be
+  ignored (and set to zero value).
+
+o If there will be multiple successful command replies
+  then Status field includes SILC_STATUS_LIST_START,
+  SILC_STATUS_LIST_ITEM or SILC_STATUS_LIST_END value,
+  and Error field is set to SILC_STATUS_OK.
+
+o If there are multiple error replies then Status field
+  includes SILC_STATUS_LIST_START, SILC_STATUS_LIST_ITEM
+  or SILC_STATUS_LIST_END value, and the Error field
+  includes the error value.
+.in 3
+
+This way it is possible to send single successful or
+single error reply, but also multiple successful and
+multiple error replies.  Note that it is possible to
+send both list of successful replies and list of error
+replies at the same time, however in this case the
+list of error replies MUST be sent after the successful
+replies.  This way the recipient may ignore the multiple
+errors if it wishes to do so.  Also note that in this
+case the successful and error replies belong to the
+same list.
+
+All Status messages are described in the next section.
+
+
+.ti 0
+3 SILC Status Types
+
+Status messages are returned in SILC protocol in command reply
+packet and in notify packet.  The SILC_PACKET_COMMAND_REPLY is
+the command reply packet and status types are sent inside the
+Status Payload as one of command reply argument, as defined in
+previous sections.  For SILC_PACKET_NOTIFY packet they can be sent
+as defined in [SILC2] for SILC_NOTIFY_TYPE_ERROR type.  The same
+types defined in this section are used in both cases.
+
+When returning status messages in the command reply message they
+indicate whether the command was executed without errors.  If error
+occurred the status indicates which error occurred.  If error
+occurred the arguments to the command replies are dictated by the
+error type.  If arguments are to be sent, they are defined below
+with the error status types.
+
+When sending status messages in SILC_NOTIFY_TYPE_ERROR notify type
+they always send some error status.  Usually they are sent to
+indicate that error occurred while processing some SILC packet.
+Please see the [SILC1] and [SILC2] for more information sending
+status types in SILC_NOTIFY_TYPE_ERROR notify.
+
+The Status Types are only numeric values and the receiver must
+convert the numeric values into human readable messages if this
+is desired in the application.
+
+List of all defined status types:
+
+.in 0
+   Generic status messages:
+
+   0    SILC_STATUS_OK
+
+        Ok status.  Everything went Ok.  The status payload maybe
+        safely ignored in this case.
+
+   1    SILC_STATUS_LIST_START
+
+        Start of the list.  There will be several command replies and
+        this reply is the start of the list.
+
+   2    SILC_STATUS_LIST_ITEM
+
+        Item in the list.  This is one of the item in the list but not the
+        first or last one.
+
+   3    SILC_STATUS_LIST_END
+
+        End of the list.  There were several command replies and this
+        reply is the last of the list.  There won't be other replies
+        belonging to this list after this one.
+
+   4 - 9
+
+        Currently undefined and has been reserved for the future.
+
+
+   Error status message:
+
+
+
+   10   SILC_STATUS_ERR_NO_SUCH_NICK
+
+        "No such nickname".  Requested nickname does not exist.
+         The next argument MUST be the requested nickname.
+
+   11   SILC_STATUS_ERR_NO_SUCH_CHANNEL
+
+        "No such channel".  Requested channel name does not exist.
+         The next argument MUST be the requested channel name.
+
+   12   SILC_STATUS_ERR_NO_SUCH_SERVER
+
+        "No such server".  Requested server name does not exist.
+         The next argument MUST be the requested server name.
+
+   13   SILC_STATUS_ERR_INCOMPLETE_INFORMATION
+
+        "Incomplete registration information".  Information remote
+        sent was incomplete.
+
+   14   SILC_STATUS_ERR_NO_RECIPIENT
+
+        "No recipient given".  Command required recipient which was
+        not provided.
+
+   15   SILC_STATUS_ERR_UNKNOWN_COMMAND
+
+        "Unknown command".  Command sent to server is unknown by the
+        server.
+
+   16   SILC_STATUS_ERR_WILDCARDS
+
+        "Wildcards cannot be used".  Wildcards were provided but they
+        weren't permitted.
+
+   17   SILC_STATUS_ERR_NO_CLIENT_ID
+
+        "No Client ID given".  Client ID were expected as command
+        parameter but were not found.
+
+   18   SILC_STATUS_ERR_NO_CHANNEL_ID
+
+        "No Channel ID given".  Channel ID were expected as command
+        parameter but were not found.
+
+   19   SILC_STATUS_ERR_NO_SERVER_ID
+
+        "No Serve ID given".  Server ID were expected as command
+        parameter but were not found.
+
+   20   SILC_STATUS_ERR_BAD_CLIENT_ID
+
+        "Bad Client ID".  Client ID provided were erroneous.
+         The next argument MUST be the provided ID.
+
+   21   SILC_STATUS_ERR_BAD_CHANNEL_ID
+
+        "Bad Channel ID".  Channel ID provided were erroneous.
+         The next argument MUST be the provided ID.
+
+   22   SILC_STATUS_ERR_NO_SUCH_CLIENT_ID
+
+        "No such Client ID".  Client ID provided does not exist.
+        The unknown Client ID MUST be provided as next argument
+        in the reply.
+
+   23   SILC_STATUS_ERR_NO_SUCH_CHANNEL_ID
+
+        "No such Channel ID".  Channel ID provided does not exist.
+        The unknown Channel ID MUST be provided as next argument
+        in the reply.
+
+   24   SILC_STATUS_ERR_NICKNAME_IN_USE
+
+        "Nickname already exists".  Nickname created could not be
+        registered because number of same nicknames were already set to
+        maximum.  This is not expected to happen in real life but is
+        possible to occur.
+
+   25   SILC_STATUS_ERR_NOT_ON_CHANNEL
+
+        "You are not on that channel".  The command were specified for
+        channel user is not currently on.  The next argument MUST be the
+        Channel ID.
+
+   26   SILC_STATUS_ERR_USER_NOT_ON_CHANNEL
+
+        "They are not on channel".  The requested target client is not
+        on requested channel.  The next two arguments, in this order,
+        MUST be the requested Client ID and Channel ID.
+
+   27   SILC_STATUS_ERR_USER_ON_CHANNEL
+
+        "User already on channel".  User were invited on channel they
+        already are on.  The next two arguments, in this order, MUST be
+        the  requested Client ID and Channel ID.
+
+   28   SILC_STATUS_ERR_NOT_REGISTERED
+
+        "You have not registered".  User executed command that requires
+        the client to be registered on the server before it may be
+        executed.
+
+   29   SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+
+        "Not enough parameters".  Command requires more parameters
+        than provided.
+
+   30   SILC_STATUS_ERR_TOO_MANY_PARAMS
+
+        "Too many parameters".  Too many parameters were provided
+        for the command.
+
+   31   SILC_STATUS_ERR_PERM_DENIED
+
+        "Permission denied".  Generic permission denied error status
+        to indicate disallowed access.
+
+   32   SILC_STATUS_ERR_BANNED_FROM_SERVER
+
+        "You are banned from this server".  The client tried to register
+        on server that has explicitly denied this host to connect.
+
+   33   SILC_STATUS_ERR_BAD_PASSWORD
+
+        "Cannot join channel. Incorrect password".  Password provided for
+        channel were not accepted.  The next argument MUST be the
+        Channel ID.
+
+   34   SILC_STATUS_ERR_CHANNEL_IS_FULL
+
+        "Cannot join channel. Channel is full".  The channel is full
+        and client cannot be joined to it.  The next argument MUST be
+        the Channel ID.
+
+   35   SILC_STATUS_ERR_NOT_INVITED
+
+        "Cannot join channel. You have not been invited".  The channel
+        is invite only channel and client has not been invited.  The next
+        argument MUST be the Channel ID.
+
+   36   SILC_STATUS_ERR_BANNED_FROM_CHANNEL
+
+        "Cannot join channel. You have been banned".  The client has
+        been banned from the channel.  The next argument MUST be the
+        Channel ID.
+
+   37   SILC_STATUS_ERR_UNKNOWN_MODE
+
+        "Unknown mode".  Mode provided by the client were unknown to
+        the server.
+
+   38   SILC_STATUS_ERR_NOT_YOU
+
+        "Cannot change mode for other users".  User tried to change
+        someone else's mode.
+
+   39   SILC_STATUS_ERR_NO_CHANNEL_PRIV
+
+        "Permission denied. You are not channel operator".  Command may
+        be executed only by channel operator.  The next argument MUST be
+        the Channel ID.
+
+   40   SILC_STATUS_ERR_NO_CHANNEL_FOPRIV
+
+        "Permission denied. You are not channel founder".  Command may
+        be executed only by channel operator.  The next argument MUST be
+        the Channel ID.
+
+   41   SILC_STATUS_ERR_NO_SERVER_PRIV
+
+        "Permission denied. You are not server operator".  Command may
+        be executed only by server operator.
+
+   42   SILC_STATUS_ERR_NO_ROUTER_PRIV
+
+        "Permission denied. You are not SILC operator".  Command may be
+        executed only by router (SILC) operator.
+
+   43   SILC_STATUS_ERR_BAD_NICKNAME
+
+        "Bad nickname".  Nickname requested contained illegal characters
+        or were malformed.
+
+   44   SILC_STATUS_ERR_BAD_CHANNEL
+
+        "Bad channel name".  Channel requested contained illegal characters
+        or were malformed.
+
+   45   SILC_STATUS_ERR_AUTH_FAILED
+
+        "Authentication failed".  The authentication data sent as
+        argument were wrong and thus authentication failed.
+
+   46   SILC_STATUS_ERR_UNKOWN_ALGORITHM
+
+        "The algorithm was not supported."  The server does not support the
+        requested algorithm.  The next argument MUST be the algorithm name
+        string.
+
+   47   SILC_STATUS_ERR_NO_SUCH_SERVER_ID
+
+        "No such Server ID".  Server ID provided does not exist.
+        The unknown Server ID MUST be provided as next argument
+        in the reply.
+
+   48   SILC_STATUS_ERR_RESOURCE_LIMIT
+
+        "No more resources available".  This can mean that server cannot
+        or will not accept something due to resource limitations.
+
+   49   SILC_STATUS_ERR_NO_SUCH_SERVICE
+
+        "Service does not exist".  Requested service identifier is
+        unknown.  The next argument MUST be the service identifier.
+
+   50   SILC_STATUS_ERR_NOT_AUTHENTICATED
+
+        "You have not been authenticated".  Remote connection is not
+        authenticated even though it is supposed to be.
+
+   51   SILC_STATUS_ERR_BAD_SERVER_ID
+
+        "Server ID is not valid".  Provided server ID is not valid.
+        The next argument MUST be the provided ID.
+
+   52   SILC_STATUS_ERR_KEY_EXCHANGE_FAILED
+
+        "Key exchange failed".  Key Exchange protocol failed.
+
+   53   SILC_STATUS_ERR_BAD_VERSION
+
+        "Bad version".  Protocol or software version mismatch.
+
+   54   SILC_STATUS_ERR_TIMEDOUT
+
+        "Operation timed out".  Operation or service request timed
+        out, and thus was not processed.
+
+   55   SILC_STATUS_ERR_UNSUPPORTED_PUBLIC_KEY
+
+        "Unsupported public key type".  The public key or certificate
+        type is not supported in this implementation.
+
+   56   SILC_STATUS_ERR_OPERATION_ALLOWED
+
+        "Operation is not allowed".  A operation, for example a command,
+        is not allowed or it's execution is not allowed.
+
+.in 3
+
+
+
+.ti 0
+4 Security Considerations
+
+Security is central to the design of this protocol, and these security
+considerations permeate the specification.  Common security considerations
+such as keeping private keys truly private and using adequate lengths for
+symmetric and asymmetric keys must be followed in order to maintain the
+security of this protocol.
+
+
+.ti 0
+5 References
+
+[SILC1]      Riikonen, P., "Secure Internet Live Conferencing (SILC),
+             Protocol Specification", Internet Draft, January 2007.
+
+[SILC2]      Riikonen, P., "SILC Packet Protocol", Internet Draft,
+             January 2007.
+
+[SILC3]      Riikonen, P., "SILC Key Exchange and Authentication
+             Protocols", Internet Draft, January 2007.
+
+[IRC]        Oikarinen, J., and Reed D., "Internet Relay Chat Protocol",
+             RFC 1459, May 1993.
+
+[IRC-ARCH]   Kalt, C., "Internet Relay Chat: Architecture", RFC 2810,
+             April 2000.
+
+[IRC-CHAN]   Kalt, C., "Internet Relay Chat: Channel Management", RFC
+             2811, April 2000.
+
+[IRC-CLIENT] Kalt, C., "Internet Relay Chat: Client Protocol", RFC
+             2812, April 2000.
+
+[IRC-SERVER] Kalt, C., "Internet Relay Chat: Server Protocol", RFC
+             2813, April 2000.
+
+[SSH-TRANS]  Ylonen, T., et al, "SSH Transport Layer Protocol",
+             Internet Draft.
+
+[PGP]        Callas, J., et al, "OpenPGP Message Format", RFC 2440,
+             November 1998.
+
+[SPKI]       Ellison C., et al, "SPKI Certificate Theory", RFC 2693,
+             September 1999.
+
+[PKIX-Part1] Housley, R., et al, "Internet X.509 Public Key
+             Infrastructure, Certificate and CRL Profile", RFC 2459,
+             January 1999.
+
+[Schneier]   Schneier, B., "Applied Cryptography Second Edition",
+             John Wiley & Sons, New York, NY, 1996.
+
+[Menezes]    Menezes, A., et al, "Handbook of Applied Cryptography",
+             CRC Press 1997.
+
+[OAKLEY]     Orman, H., "The OAKLEY Key Determination Protocol",
+             RFC 2412, November 1998.
+
+[ISAKMP]     Maughan D., et al, "Internet Security Association and
+             Key Management Protocol (ISAKMP)", RFC 2408, November
+             1998.
+
+[IKE]        Harkins D., and Carrel D., "The Internet Key Exchange
+             (IKE)", RFC 2409, November 1998.
+
+[HMAC]       Krawczyk, H., "HMAC: Keyed-Hashing for Message
+             Authentication", RFC 2104, February 1997.
+
+[PKCS1]      Kalinski, B., and Staddon, J., "PKCS #1 RSA Cryptography
+             Specifications, Version 2.0", RFC 2437, October 1998.
+
+[RFC2119]    Bradner, S., "Key Words for use in RFCs to Indicate
+             Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+[RFC3629]    Yergeau, F., "UTF-8, a transformation format of ISO
+             10646", RFC 3629, November 2003.
+
+[ATTRS]      Riikonen, P., "User Online Presence and Information
+             Attributes", Internet Draft, May 2002.
+
+
+.ti 0
+6 Author's Address
+
+.nf
+Pekka Riikonen
+Helsinki
+Finland
+
+EMail: priikone@iki.fi
+
+
+.ti 0
+Appendix A
+
+This appendix defines the usage of the <Requested Attributes> argument in
+the SILC_COMMAND_WHOIS command.  The attributes are defined in [ATTRS],
+and may be used to request additional information about the user.  Since
+the information that may be requested using the attributes is something
+that server cannot deliver to the sender, it is possible to send the WHOIS
+command directly to the destination client whom will then provide the
+requested attributes.  This requires the servers to relay the WHOIS
+command to the client, and it requires capability for handling the WHOIS
+command in the client end.
+
+The <Requested Attributes> MAY include several attributes that are
+requested.  The format and encoding of the <Requested Attributes> is as
+defined in [ATTRS].  When <Requested Attributes> argument is set the
+server MAY process the attributes to see whether it can narrow down
+the WHOIS search, for example when searching with a nickname.  The
+normal servers MUST process the WHOIS command as normal WHOIS command,
+that is to send the command directly to the router.  The router MAY
+process the attributes, but it MUST send the command to the server
+that owns the requested client.
+
+The server that owns the client and receives the command MUST check
+whether the client is detached from the network.  If it is detached,
+that is the user mode has the SILC_UMODE_DETACHED mode set, it SHOULD
+process the attributes and provide as many of the requested attributes
+as possible and then send reply back to the sender.  If the client is
+active in the network it MUST send the command to the client for
+processing.
+
+The client receiving WHOIS command SHOULD check whether the
+<Requested Attributes> argument is set.  If it is not set then the
+WHOIS command SHOULD be discarded.  The client processes the requested
+attributes and SHOULD reply to each of the requested attribute with
+either valid value, or with an indication that the requested attribute
+is not known or supported.  This is to be done as defined in [ATTRS].
+The client always MUST send a reply to the command when some attributes
+were requested.  The client MAY also add additional attributes to the
+reply even if they were not requested.  The client MAY also digitally
+sign the attributes with ATTRIBUTE_USER_DIGITAL_SIGNATURE as defined
+in [ATTRS].  Then the client sends the reply back to the sender of
+the command.  The command reply that client assembles does not need
+to include any other argument but the <Status Payload> (1), and the
+<Attributes> (11).  The server receiving reply from client MUST allow
+this sort of command reply for WHOIS command.
+
+The information received from the client MAY be cached in the
+server's end.  The caching may be desired for example if the client
+can be detached from the network.  This way the server is then able
+to provide at least partial information for a requester.  The
+server MAY also process the command reply and verify whether the
+attributes provided in the reply are actually valid.  If it can do
+this, and verify that they indeed are valid values it MAY append
+a digital signature at the end of the attributes with the
+ATTRIBUTE_SERVER_DIGITAL_SIGNATURE as defined in [ATTRS].  The
+server then MUST provide valid WHOIS command reply to the sender
+of the command.   Other servers and routers that receive the command
+reply en route to the original sender MAY also cache the information.
+
+The client which receives the command reply to the WHOIS command
+SHOULD verify the ATTRIBUTE_USER_DIGITAL_SIGNATURE and the
+ATTRIBUTE_SERVER_DIGITAL_SIGNATURE if they are provided.
+
+
+.ti 0
+Full Copyright Statement
+
+Copyright (C) The Internet Society (2003). All Rights Reserved.
+
+This document and translations of it may be copied and furnished to
+others, and derivative works that comment on or otherwise explain it
+or assist in its implementation may be prepared, copied, published
+and distributed, in whole or in part, without restriction of any
+kind, provided that the above copyright notice and this paragraph are
+included on all such copies and derivative works. However, this
+document itself may not be modified in any way, such as by removing
+the copyright notice or references to the Internet Society or other
+Internet organizations, except as needed for the purpose of
+developing Internet standards in which case the procedures for
+copyrights defined in the Internet Standards process must be
+followed, or as required to translate it into languages other than
+English.
+
+The limited permissions granted above are perpetual and will not be
+revoked by the Internet Society or its successors or assigns.
+
+This document and the information contained herein is provided on an
+"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
index c6e633b8cf4e8d16588afbf0329471f47e54105b..fe257a280ee27d120ce710c4c29996b386d2e273 100644 (file)
@@ -8,7 +8,7 @@
 .ds RF FORMFEED[Page %]
 .ds CF
 .ds LH Internet-Draft
-.ds RH XXX
+.ds RH 15 January 2007
 .ds CH
 .na
 .hy 0
@@ -16,8 +16,8 @@
 .nf
 Network Working Group                                        P. Riikonen
 Internet-Draft
-draft-riikonen-silc-ke-auth-09.txt                       XXX
-Expires: XXX
+draft-riikonen-silc-ke-auth-09.txt                       15 January 2007
+Expires: 15 July 2007
 
 .in 3
 
@@ -61,10 +61,9 @@ derived from several key exchange protocols.
 
 The second protocol, SILC Connection Authentication protocol provides
 user level authentication used when creating connections in SILC
-network.  The protocol is transparent to the authentication data
-which means that it can be used to authenticate the connection with, for
-example, passphrase (pre-shared secret) or public key (and certificate)
-based on digital signatures.
+network.  The protocol supports passphrase (pre-shared secret)
+authentication and public key (and certificate) authentication based
+on digital signatures.
 
 
 
@@ -77,24 +76,24 @@ Table of Contents
 2 SILC Key Exchange Protocol ....................................  3
   2.1 Key Exchange Payloads .....................................  4
       2.1.1 Key Exchange Start Payload ..........................  4
-      2.1.2 Key Exchange Payload ................................  8
+      2.1.2 Key Exchange Payload ................................  9
   2.2 Key Exchange Procedure .................................... 11
-  2.3 Processing the Key Material ............................... 12
-  2.4 SILC Key Exchange Groups .................................. 14
-      2.4.1 diffie-hellman-group1 ............................... 14
+  2.3 Processing the Key Material ............................... 13
+  2.4 SILC Key Exchange Groups .................................. 15
+      2.4.1 diffie-hellman-group1 ............................... 15
       2.4.2 diffie-hellman-group2 ............................... 15
-      2.4.3 diffie-hellman-group3 ............................... 15
+      2.4.3 diffie-hellman-group3 ............................... 16
   2.5 Key Exchange Status Types ................................. 16
-3 SILC Connection Authentication Protocol ....................... 17
-  3.1 Connection Auth Payload ................................... 18
-  3.2 Connection Authentication Types ........................... 19
-      3.2.1 Passphrase Authentication ........................... 19
-      3.2.2 Public Key Authentication ........................... 20
+3 SILC Connection Authentication Protocol ....................... 18
+  3.1 Connection Auth Payload ................................... 19
+  3.2 Connection Authentication Types ........................... 20
+      3.2.1 Passphrase Authentication ........................... 20
+      3.2.2 Public Key Authentication ........................... 21
   3.3 Connection Authentication Status Types .................... 21
-4 Security Considerations ....................................... 21
-5 References .................................................... 21
+4 Security Considerations ....................................... 22
+5 References .................................................... 22
 6 Author's Address .............................................. 23
-7 Full Copyright Statement ...................................... 23
+7 Full Copyright Statement ...................................... 24
 
 
 .ti 0
@@ -121,9 +120,8 @@ protocol [OAKLEY].
 
 The second protocol, SILC Connection Authentication protocol provides
 user level authentication used when creating connections in SILC
-network.  The protocol is transparent to the authentication data which
-means that it can be used to authenticate the connection with, for example,
-passphrase (pre-shared secret) or public key (and certificate) based
+network.  The protocol supports passphrase (pre-shared secret)
+authentication and public key (and certificate) authentication based
 on digital signatures.
 
 The basis of secure SILC session requires strong and secure key exchange
@@ -184,7 +182,6 @@ There are several payloads used in the key exchange.  As for all SILC
 packets, SILC Packet Header, described in [SILC2], is at the beginning
 of all packets sent in during this protocol.  All the fields in the
 following payloads are in MSB (most significant byte first) order.
-Following descriptions of these payloads.
 
 
 .ti 0
@@ -340,6 +337,14 @@ o Flags (1 byte) - Indicates flags to be used in the key
        however without this flag UDP connection cannot be
        used.  The flag MAY also be used in TCP connection.
 
+       When using with UDP/IP implementations SHOULD use
+       anti-replay methods where an anti-replay window
+       defines what packets are replays.  An example of
+       anti-window protocol is in [RFC2406] Section 3.4.2
+       with example source code in [RFC2401] Appendix C.
+       While [RFC2401] and [RFC2406] does not relate to SILC,
+       the anti-replay method used is applicable in SILC.
+
      PFS                      0x02
 
        Perfect Forward Secrecy (PFS) to be used in the
@@ -443,10 +448,10 @@ two SILC clients.  In normal case, where client is connecting to a
 server, or server is connecting to a router the Mutual Authentication
 flag MAY be omitted.  However, if the connection authentication protocol
 for the connecting entity is not based on digital signatures (it is
-based on pre-shared key) then the Mutual Authentication flag SHOULD be
-enabled.  This way the connecting entity has to provide proof of
-possession of the private key for the public key it will provide in
-this protocol.
+based on pre-shared key or there is no authentication) then the Mutual
+Authentication flag SHOULD be enabled.  This way the connecting entity
+has to provide proof of possession of the private key for the public key
+it will provide in this protocol.
 
 When performing re-key with PFS selected this is the only payload that
 is sent in the SKE protocol.  The Key Exchange Start Payload MUST NOT
@@ -519,7 +524,7 @@ o Public Key Type (2 bytes) - The public key (or certificate)
 
 o Public Key (or certificate) (variable length) - The
   public key or certificate of the party.  This public key
-  is used to verify the digital signature.  The public key
+  may be used to verify the digital signature.  The public key
   or certificate in this field is encoded in the manner as
   defined in their respective definitions; see previous field.
 
@@ -1039,7 +1044,8 @@ Public key authentication may be used if passphrase based authentication
 is not desired.  The public key authentication works by sending a
 digital signature as authentication data to the other end, say, server.
 The server MUST then verify the signature by the public key of the sender,
-which the server has received earlier in SKE protocol.
+which the server has received earlier in SKE protocol, or which the
+server has cached locally at some previous time.
 
 The signature is computed using the private key of the sender by signing
 the HASH value provided by the SKE protocol previously, and the Key
@@ -1100,12 +1106,12 @@ security of this protocol.
 5 References
 
 [SILC1]      Riikonen, P., "Secure Internet Live Conferencing (SILC),
-             Protocol Specification", Internet Draft, June 2003.
+             Protocol Specification", Internet Draft, January 2007.
 
 [SILC2]      Riikonen, P., "SILC Packet Protocol", Internet Draft,
-             June 2003.
+             January 2007.
 
-[SILC4]      Riikonen, P., "SILC Commands", Internet Draft, June 2003.
+[SILC4]      Riikonen, P., "SILC Commands", Internet Draft, January 2007.
 
 [IRC]        Oikarinen, J., and Reed D., "Internet Relay Chat Protocol",
              RFC 1459, May 1993.
@@ -1163,14 +1169,19 @@ security of this protocol.
 [RFC2279]    Yergeau, F., "UTF-8, a transformation format of ISO
              10646", RFC 2279, January 1998.
 
+[RFC2401]    Kent, S., et al, "Security Architecture for the Internet
+             Protocol", RFC 2401, November 1998.
+
+[RFC2406]    Kent, S., et al, "Security Architecture for the Internet
+             Protocol", RFC 2406, November 1998.
+
 
 .ti 0
 6 Author's Address
 
 .nf
 Pekka Riikonen
-Snellmaninkatu 34 A 15
-70100 Kuopio
+Helsinki
 Finland
 
 EMail: priikone@iki.fi
diff --git a/doc/draft-riikonen-silc-multimedia-session-00.nroff b/doc/draft-riikonen-silc-multimedia-session-00.nroff
new file mode 100644 (file)
index 0000000..6f7d4ac
--- /dev/null
@@ -0,0 +1,393 @@
+.pl 10.0i
+.po 0
+.ll 7.2i
+.lt 7.2i
+.nr LL 7.2i
+.nr LT 7.2i
+.ds LF Riikonen
+.ds RF FORMFEED[Page %]
+.ds CF
+.ds LH Internet-Draft
+.ds RH 15 January 2007
+.ds CH
+.na
+.hy 0
+.in 0
+.nf
+Network Working Group                                        P. Riikonen
+Internet-Draft
+draft-riikonen-silc-multimedia-session-00.txt            15 January 2007
+Expires: 15 July 2007
+
+.in 3
+
+.ce 2
+Multimedia Sessions in SILC protocol
+<draft-riikonen-silc-multimedia-session-00.txt>
+
+.ti 0
+Status of this Memo
+
+This document is an Internet-Draft and is in full conformance with
+all provisions of Section 10 of RFC 2026.  Internet-Drafts are
+working documents of the Internet Engineering Task Force (IETF), its
+areas, and its working groups.  Note that other groups may also
+distribute working documents as Internet-Drafts.
+
+Internet-Drafts are draft documents valid for a maximum of six months
+and may be updated, replaced, or obsoleted by other documents at any
+time.  It is inappropriate to use Internet-Drafts as reference
+material or to cite them other than as "work in progress."
+
+The list of current Internet-Drafts can be accessed at
+http://www.ietf.org/ietf/1id-abstracts.txt
+
+The list of Internet-Draft Shadow Directories can be accessed at
+http://www.ietf.org/shadow.html
+
+The distribution of this memo is unlimited.
+
+
+.ti 0
+Abstract
+
+This document defines the use of multimedia protocols and the set up
+of multimedia sessions in the Secure Internet Live Conferencing (SILC)
+protocol [SILC1].
+
+
+.ti 0
+Table of Contents
+
+.nf
+1 Introduction ..................................................  2
+  1.1 Requirements Terminology ..................................  2
+2 Recommended Protocol ..........................................  2
+3 Session Description Protocol (SDP) ............................  2
+  3.1 SDP field usage in SILC ...................................  3
+  3.2 SDP Examples ..............................................  5
+4 Session Initiation Protocol (SIP) .............................  6
+6 Other Protocols ...............................................  6
+7 Security Considerations .......................................  7
+8 References ....................................................  7
+9 Author's Address ..............................................  7
+10 Full Copyright Statement .....................................  7
+
+
+.ti 0
+1 Introduction
+
+This document defines the use of multimedia protocols and the set up
+of multimedia sessions in the Secure Internet Live Conferencing (SILC)
+protocol [SILC1].  The SILC protocol supports multimedia messages
+with the Message Payload [SILC2] and SILC_MESSAGE_FLAG_DATA which
+has the ability to define what type of content is delievered within
+the payload.  The Message Payload is used to encapsulate the multimedia
+session set up procedure and the actual multimedia session data.  We
+define the recommended multimedia session protocol for SILC and also
+consider some other protocols in the scope of SILC.
+
+
+.ti 0
+1.1 Requirements Terminology
+
+The keywords MUST, MUST NOT, REQUIRED, SHOULD, SHOULD NOT, RECOMMENDED,
+MAY, and OPTIONAL, when they appear in this document, are to be
+interpreted as described in [RFC2119].
+
+
+.ti 0
+2 Recommended Protocol
+
+Since SILC protocol can encapsulate practically any protocol for setting
+up a multimedia session we have selected the Session Description Protocol
+(SDP) as RECOMMENDED protocol.  It was chosen for its maturity, simplicity
+and versatility.  If multimedia features are implemented in SILC
+application it is recommended that at least support for SDP is added.
+
+
+.ti 0
+3 Session Description Protocol (SDP)
+
+The SDP [SDP] protocol defines a general purpose multimedia session
+description protocol.  SDP is one of the simplest protocols to negotiate
+multimedia sessions and is suited perfectly for SILC protocol.  Since SDP
+does not itself define how it is used to set up the session, we define it
+here for SILC.  The definition is based on the [RFC3264] and [RFC4145].
+
+In SILC the SDP messages are sent as data messages (MIME message).  They
+can be destined directly to a client for direct conferencing, or to a
+channel for group conferencing.  It is also possible to send the message
+directly to client to invite them to group conferencing before they have
+joined the channel.  The MIME type used is application/sdp.
+
+To set up a multimedia session a client sends SILC message with
+SILC_MESSAGE_FLAG_DATA and SILC_MESSAGE_FLAG_REQUEST flags set and with
+MIME SDP message in the message payload.  If the receiver wants to
+participate in the multimedia session it sends MIME SDP message back with
+SILC_MESSAGE_FLAG_DATA and SILC_MESSAGE_FLAG_REPLY flags set to the
+sender.  If reply is not received after an application defined period of
+time the message may be retransmitted or the session set up may be
+terminated.
+
+After reply has been received the multimedia session is started according
+to the SDP and all multimedia data is sent using SILC data messages.  When
+performing peer-to-peer connection the SDP defines which party initiates
+the connection.  After initiation the SILC Key Exchange protocol MUST be
+performed.  The resulted key material will be used to protect the multimedia
+session.  Multimedia data transmission may start after the key exchange
+has been performed.  When performing group conferencing all parties
+independently connect to the SILC server specified in the SDP.  In other
+cases when performing the multimedia session inside the SILC network, any
+party may start transmitting the multimedia data after the SDPs have been
+exchanged.
+
+To terminate the session, or to reject incoming request, an MD5 digest
+MUST be computed from the original SDP data, and the digest is sent back
+with the SILC_MESSAGE_FLAG_DATA and SILC_MESSAGE_FLAG_STOP flags set.
+The receiver of such message should verify the MD5 digest and terminate
+the session if it matches any active session.  The session may also be
+terminated by closing network connection.  In group sessions simply by
+leaving the channel terminates the session.  The original sender of the
+SDP message may send the terminating message to notify all clients on the
+channel to terminate the session.  If the original sender on channel
+receives the terminating message it takes no action on it.
+
+.ti 0
+3.1 SDP field usage in SILC
+
+The Encryption Keys (k=) field describes encryption key to protect the
+multimedia session.  As SILC protocol transport and the multimedia session
+is secured by default this field SHOULD NOT be used.
+
+
+The Origin (o=) field describes from where the session originates.  The
+<username> sub-field is the sender's SILC nickname.  Examples:
+
+       o=foobar 2890844521 2890842804 IN IP4 10.2.1.7
+
+
+The Connection Data (c=) field describes the connection information for
+the multimedia session.  When performing peer-to-peer multimedia session
+the <network type> is 'IN', indicating Internet connection.  When
+performing multimedia session inside SILC network it is 'SILC'.  When the
+'SILC' network type is used the <address type> and <connection address>
+sub-fields are omitted.  Examples:
+
+       c=SILC
+       c=IN IP4 10.2.1.7
+
+
+The Media Announcements (m=) field describes the media information for the
+multimedia session.  If the network type in c= field is 'SILC' the <port>
+sub-field MUST be set to 9 (discard).  The <transport> for RTP over UDP is
+'RTP/AVP', for RTP over TCP it is 'TCP/RTP/AVP', and for non-RTP protocol
+over UDP it is 'udp' and over TCP it is 'tcp'.  The <fmt> sub-field
+includes the RTP media payload number when using RTP.  When using non-RTP
+protocol it includes MIME subtype.  Examples:
+
+       c=SILC
+       m=audio 9 TCP/RTP/AVP 3
+       a=rtpmap:3 GSM/8000
+
+       c=SILC
+       m=audio 9 tcp mpeg
+
+
+The Attributes (a=) field can be used to set various session and media
+specific attributes.  For SILC we define attribute "silc".
+
+       a=silc:<session type> <parameters>
+
+The <session type> is either "direct" or "group".  When it is "direct"
+and the c= field defines a connection point the connection will be
+peer-to-peer connection to the remote client.  If it is "group" and the
+the c= field defines a connection point the connection will be to a remote
+SILC server for group conferencing.  If c= field includes "SILC" network
+type, then "direct" is for direct session with a client in SILC network
+and "group" is for group conferencing in SILC network.  If the "silc"
+attribute is omitted the session type is expected to be "direct".  The
+following parameters are defined for attribute "silc".
+
+       channel         The name of the channel for group conferencing.
+                       Can be used only with "group" session type.
+                       More than one channel parameters may be defined.
+
+
+The [RFC4145] specifies a "setup" attribute that defines which party of the
+session will initiate the connection when performing peer-to-peer session.
+Its use in SILC is as specified in [RFC4145] and MUST be present in SDP
+when the c= field includes an actual connection point and when the "silc"
+attribute session type is "direct", or if the attribute is not present at
+all.  When performing group conferencing each party always need to create
+the connection to the server and the "setup" attribute need not be present
+in SDP.
+
+.ti 0
+3.2 SDP Examples
+
+       v=0
+       o=foobar 2890844521 2890842804 IN IP4 10.2.1.100
+       s=peer-to-peer example
+       t=0 0
+       m=audio 5000 TCP/RTP/AVP 3
+       c=IN IP4 10.2.1.100
+       a=rtpmap:3 GSM/8000
+       a=silc:direct
+       a=setup:active
+
+This example sets up a peer-to-peer session to remote client at
+10.2.1.100 at port 5000.
+
+       v=0
+       o=foobar 2890844521 2890842804 IN IP4 10.2.1.32
+       s=Group conferencing example
+       c=IN IP4 10.2.1.7
+       t=0 0
+       a=silc:group channel=foobar
+       m=audio 706 TCP/RTP/AVP 3
+       a=rtpmap:3 GSM/8000
+
+This example sets up a session to a remote SILC server 10.2.1.7 at port
+706.  Once connected the channel "foobar" will be joined for group
+conferencing.
+
+       v=0
+       o=foobar 2890844521 2890842804 IN IP4 10.2.1.32
+       s=SILC network chat example
+       c=SILC
+       t=0 0
+       m=audio 9 TCP/RTP/AVP 3
+       a=rtpmap:3 GSM/8000
+
+This example sets up a session inside SILC network with the remote user
+"foobar".
+
+       v=0
+       o=foobar 2890844521 2890842804 IN IP4 10.2.1.32
+       s=SILC network group conferencing example
+       t=0 0
+       m=audio 9 TCP/RTP/AVP 3
+       c=SILC
+       a=rtpmap:3 GSM/8000
+       a=silc:group channel=group-chat
+
+This example sets up a group conferencing session inside SILC network on
+channel "group-chat".
+
+
+.ti 0
+4 Session Initiation Protocol (SIP)
+
+The SIP [SIP] protocol is a general purpose protocol for setting up,
+modifying and terminating different kinds of sessions, including
+multimedia sessions.  The SIP protocol use the SDP to describe the
+multimedia session.
+
+In SILC the SIP messages are sent as data messages (MIME message).  They
+can be destined directly to a client for direct conferencing, or to a
+channel for group conferencing.  It is also possible to send the message
+directly to client to invite them to group conferencing before they have
+joined the channel.  The MIME type used is application/sip.  The
+SILC_MESSAGE_FLAG_DATA flag must be set in each message and the message
+payload includes a MIME SIP message.  The actual SIP session set up and
+termination is described in the SIP protocol specification, and SILC
+protocol merely provides a secure transport for the session.  After the
+session is set up all multimedia data is sent using SILC data messages.
+The MIME type for the multimedia data messages is defined during the SIP
+session set up.
+
+The rules for SDP fields described in previous section also applies for
+SDP with SIP in the context of SILC.
+
+Proxy and redirection servers usually would not be used in the context of
+SILC, unless the sessions are redirected to outside SILC network.  This
+may compromise the security of the session.
+
+The S/MIME need not be used when using SIP in SILC protocol.  The SILC
+protocol transport and the created multimedia session is secured by
+default.
+
+
+.ti 0
+6 Other Protocols
+
+There are other open and proprietary protocols for setting up multimedia
+sessions.  One important is H.323 using the H.225 to set up the session.
+This document should later define the use of H.323 with SILC.
+Practically any protocol to set up multimedia sessions may be used with
+SILC by using SILC as a secure transport to set up the session, and to use
+SILC data messages (MIME messages) to secure and deliver the actual
+multimedia data once the session has been established.
+
+
+.ti 0
+7 Security Considerations
+
+Security is central to the design of this protocol, and these security
+considerations permeate the specification.  Common security considerations
+such as keeping private keys truly private and using adequate lengths for
+symmetric and asymmetric keys must be followed in order to maintain the
+security of this protocol.
+
+
+.ti 0
+8 References
+
+[SILC1]      Riikonen, P., "Secure Internet Live Conferencing (SILC),
+             Protocol Specification", Internet Draft, June 2003.
+
+[SILC2]      Riikonen, P., "SILC Packet Protocol", Internet Draft,
+             June 2003.
+
+[RFC3264]    Rosenberg, J., et. al., "An Offer/Answer Model with the
+             Session Description Protocol (SDP)", RFC 3264, June 2002.
+
+[RFC4145]    Yon, D., et. al., "TCP-Based Media Transport in the
+             Session Description Protocol (SDP)", RFC 4145, September
+             2005.
+
+[SIP]        Rosenberg, J., et. al., "SIP: Session Initiation Protocol",
+             RFC 3261, June 2002.
+
+
+
+.ti 0
+9 Author's Address
+
+.nf
+Pekka Riikonen
+Helsinki
+Finland
+
+EMail: priikone@iki.fi
+
+
+.ti 0
+10 Full Copyright Statement
+
+Copyright (C) The Internet Society (2003). All Rights Reserved.
+
+This document and translations of it may be copied and furnished to
+others, and derivative works that comment on or otherwise explain it
+or assist in its implementation may be prepared, copied, published
+and distributed, in whole or in part, without restriction of any
+kind, provided that the above copyright notice and this paragraph are
+included on all such copies and derivative works. However, this
+document itself may not be modified in any way, such as by removing
+the copyright notice or references to the Internet Society or other
+Internet organizations, except as needed for the purpose of
+developing Internet standards in which case the procedures for
+copyrights defined in the Internet Standards process must be
+followed, or as required to translate it into languages other than
+English.
+
+The limited permissions granted above are perpetual and will not be
+revoked by the Internet Society or its successors or assigns.
+
+This document and the information contained herein is provided on an
+"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
index 53c73e45a22c84ad267c340e14d06233005c04dd..b247737da0fb26419dc308f29d1f24aee49530a0 100644 (file)
@@ -8,7 +8,7 @@
 .ds RF FORMFEED[Page %]
 .ds CF
 .ds LH Internet Draft
-.ds RH XXX
+.ds RH 15 January 2007
 .ds CH
 .na
 .hy 0
@@ -16,8 +16,8 @@
 .nf
 Network Working Group                                        P. Riikonen
 Internet-Draft
-draft-riikonen-silc-pp-08.txt                            XXX
-Expires: XXX
+draft-riikonen-silc-pp-09.txt                            15 January 2007
+Expires: 15 July 2007
 
 .in 3
 
@@ -75,52 +75,53 @@ Table of Contents
 2 SILC Packet Protocol ..........................................  4
   2.1 SILC Packet ...............................................  4
   2.2 SILC Packet Header ........................................  5
-  2.3 SILC Packet Types .........................................  7
+  2.3 SILC Packet Types .........................................  8
       2.3.1 SILC Packet Payloads ................................ 15
-      2.3.2 Generic payloads .................................... 15
-            2.3.2.1 ID Payload .................................. 15
-            2.3.2.2 Argument Payload ............................ 16
+      2.3.2 Generic payloads .................................... 16
+            2.3.2.1 ID Payload .................................. 16
+            2.3.2.2 Argument Payload ............................ 17
             2.3.2.3 Argument List Payload ....................... 17
             2.3.2.4 Channel Payload ............................. 18
             2.3.2.5 Public Key Payload .......................... 19
-            2.3.2.6 Message Payload ............................. 19
+            2.3.2.6 Message Payload ............................. 20
       2.3.3 Disconnect Payload .................................. 23
-      2.3.4 Success Payload ..................................... 23
-      2.3.5 Failure Payload ..................................... 24
+      2.3.4 Success Payload ..................................... 24
+      2.3.5 Failure Payload ..................................... 25
       2.3.6 Reject Payload ...................................... 25
-      2.3.7 Notify Payload ...................................... 25
-      2.3.8 Error Payload ....................................... 34
+      2.3.7 Notify Payload ...................................... 26
+      2.3.8 Error Payload ....................................... 35
       2.3.9 Channel Message Payload ............................. 35
-      2.3.10 Channel Key Payload ................................ 35
-      2.3.11 Private Message Payload ............................ 37
-      2.3.12 Private Message Key Payload ........................ 37
-      2.3.13 Command Payload .................................... 39
-      2.3.14 Command Reply Payload .............................. 40
-      2.3.15 Connection Auth Request Payload .................... 40
+      2.3.10 Channel Key Payload ................................ 36
+      2.3.11 Private Message Payload ............................ 38
+      2.3.12 Private Message Key Payload ........................ 38
+      2.3.13 Command Payload .................................... 40
+      2.3.14 Command Reply Payload .............................. 41
+      2.3.15 Connection Auth Request Payload .................... 41
       2.3.16 New ID Payload ..................................... 42
-      2.3.17 New Client Payload ................................. 42
-      2.3.18 New Server Payload ................................. 43
-      2.3.19 New Channel Payload ................................ 44
+      2.3.17 New Client Payload ................................. 43
+      2.3.18 New Server Payload ................................. 44
+      2.3.19 New Channel Payload ................................ 45
       2.3.20 Key Agreement Payload .............................. 45
-      2.3.21 Resume Router Payload .............................. 46
+      2.3.21 Resume Router Payload .............................. 47
       2.3.22 File Transfer Payload .............................. 47
       2.3.23 Resume Client Payload .............................. 48
-  2.4 SILC ID Types ............................................. 49
-  2.5 Packet Encryption And Decryption .......................... 49
-      2.5.1 Normal Packet Encryption And Decryption ............. 50
-      2.5.2 Channel Message Encryption And Decryption ........... 50
-      2.5.3 Private Message Encryption And Decryption ........... 51
-  2.6 Packet MAC Generation ..................................... 52
-  2.7 Packet Padding Generation ................................. 53
-  2.8 Packet Compression ........................................ 53
-  2.9 Packet Sending ............................................ 54
-  2.10 Packet Reception ......................................... 54
-  2.11 Packet Routing ........................................... 54
-  2.12 Packet Broadcasting ...................................... 56
-3 Security Considerations ....................................... 56
-4 References .................................................... 56
-5 Author's Address .............................................. 58
-6 Full Copyright Statement ...................................... 58
+      2.3.24 Acknowledgement Payload ............................ 50
+  2.4 SILC ID Types ............................................. 50
+  2.5 Packet Encryption And Decryption .......................... 51
+      2.5.1 Normal Packet Encryption And Decryption ............. 51
+      2.5.2 Channel Message Encryption And Decryption ........... 52
+      2.5.3 Private Message Encryption And Decryption ........... 53
+  2.6 Packet MAC Generation ..................................... 53
+  2.7 Packet Padding Generation ................................. 54
+  2.8 Packet Compression ........................................ 54
+  2.9 Packet Sending ............................................ 55
+  2.10 Packet Reception ......................................... 55
+  2.11 Packet Routing ........................................... 55
+  2.12 Packet Broadcasting ...................................... 57
+3 Security Considerations ....................................... 57
+4 References .................................................... 57
+5 Author's Address .............................................. 59
+6 Full Copyright Statement ...................................... 59
 
 .ti 0
 List of Figures
@@ -294,9 +295,9 @@ o Flags (1 byte) - Indicates flags to be used in packet
        Indicates that the packet data MUST include private
        message that is encrypted using private key set by
        client.  Servers does not know this key and cannot
-       handle the packet, but passes it along.  See section
-       2.5.3 Private Message Encryption And Decryption for
-       more information.
+       decrypt the payload, but simply passes it along.  See
+       section 2.5.3 Private Message Encryption And Decryption
+       for more information.
 
 
      List                      0x02
@@ -331,6 +332,20 @@ o Flags (1 byte) - Indicates flags to be used in packet
        See section 2.8 Packet Compression for description of
        packet compressing.
 
+
+     Acknowledgement           0x10
+
+       Marks that the packet needs to be acknowledged by the
+       recipient.  The ACK packet MUST NOT have this flag set.
+       The acknowledgement packet is SILC_PACKET_ACK packet.
+       If the packet is not acknowledged the packet may be
+       retransmitted.  This flag is especially useful when
+       using UDP/IP and SHOULD NOT be used with TCP/IP.  The
+       flag MUST NOT be used with message packets.  The
+       SILC_MESSAGE_FLAG_ACK can be used instead.  Broadcast
+       packets MUST NOT set this flag.  Retransmission
+       may use for example exponential backoff algorithm.
+
 .in 3
 
 o Packet Type (1 byte) - Indicates the type of the packet.
@@ -717,7 +732,16 @@ List of SILC Packet types are defined as follows.
           Payload of the packet:  See section 2.3.23 Resume Client Payload
 
 
-     29 - 199
+     29   SILC_PACKET_ACK
+
+          This packet is used to acknowledge a packet that had the
+          Acknowledgement packet flag set.
+
+          Payload of the packet:  See section 2.3.24 Acknowledgement
+          Payload
+
+
+     30 - 199
 
           Currently undefined commands.
 
@@ -1132,15 +1156,14 @@ o Initialization Vector (variable length) - This field MUST
   The IV SHOULD be random data for each channel message.
 
   When encrypting private messages with session keys this
-  field MUST NOT be present.  For private messages this
-  field is present only when encrypting with a static
-  private message key (pre-shared key).  If randomly
-  generated key material is used this field MUST NOT be
-  present.  Also, If Key Agreement (SKE) was used to
-  negotiate fresh key material for private message key
-  this field MUST NOT be present.  See the section 4.6
-  in [SILC1] for more information about IVs when
-  encrypting private messages.
+  field MUST NOT be present.  For private messages this field
+  is present only when encrypting with a static private
+  message key (pre-shared key).  If randomly generated key
+  material is used this field MUST NOT be present.  Also,
+  If Key Agreement (SKE) was used to negotiate fresh key
+  material for private message key this field MUST NOT be
+  present.  See the section 4.6 in [SILC1] for more
+  information about IVs when encrypting private messages.
 
   This field includes the initialization vector used in message
   encryption.  It need to be used in the packet decryption
@@ -1161,7 +1184,7 @@ o MAC (variable length) - The MAC computed from the
   and receiver can use the MAC to verify which of the keys
   must be used in decryption.  This field is not present
   when encrypting private messages with session key.  This
-  field is not encrypted. This field is authenticated by
+  field is not encrypted.  This field is authenticated by
   the SILC packet MAC.
 .in 3
 
@@ -1438,7 +1461,8 @@ certificates sent inside arguments are actually Public Key Payloads.
       then send it to its primary router.  The router or server
       receiving the packet distributes this type to the local clients
       on the channel and broadcast it to the network.  This notify
-      MUST NOT be sent to the quitting client.
+      MUST NOT be sent to the quitting client.  The Destination ID
+      in the packet may be any ID depending to who it is destined.
 
       Max Arguments:  2
           Arguments:  (1) <Client ID>  (2) <message>
@@ -1900,7 +1924,7 @@ o Channel Key Length (2 bytes) - Indicates the length of the
   field.
 
 o Channel Key (variable length) - The actual channel key
-  material.
+  material.  See [SILC1] on how to start using the key.
 .in 3
 
 
@@ -1913,10 +1937,10 @@ and no other user inside SILC network is able to see the message.
 
 The message can be protected by the session key established by the
 SILC Key Exchange Protocol.  However, it is also possible to agree
-to use a private key to protect just the private messages.  It is
-for example possible to perform Key Agreement between two clients.
-See section 2.3.20 Key Agreement Payload how to perform key
-agreement.  It is also possible to use static or pre-shared keys
+to use a private message key to protect just the private messages.
+It is for example possible to perform Key Agreement between two
+clients.  See section 2.3.20 Key Agreement Payload how to perform
+key agreement.  It is also possible to use static or pre-shared keys
 to protect private messages.  See the 2.3.12 Private Message Key
 Payload and [SILC1] section 4.6 for detailed description for private
 message key generation.
@@ -2505,7 +2529,7 @@ they know the detached client has resumed.  Refer to the [SILC1] for
 detailed description how the detaching and resuming procedure is
 performed.
 
-The payload may only be sent with SILC_PACKET_RESUME CLIENT packet.  It
+The payload may only be sent with SILC_PACKET_RESUME_CLIENT packet.  It
 MUST NOT be sent in any other packet type.  The following diagram
 represents the Resume Client Payload.
 
@@ -2545,6 +2569,36 @@ o Authentication Payload (variable length) - The authentication
 .in 3
 
 
+.ti 0
+2.3.24 Acknowledgement Payload
+
+This payload is used to acknowledge a packet that had the Acknowledgement
+packet flag set.  The payload includes the sequence number of the packet
+that had the flag set, which the recipient can use to identify that the
+packet was acknowledged.
+
+The payload may only be sent with SILC_PACKET_ACK packet.  It
+MUST NOT be sent in any other packet type.  The following diagram
+represents the Acknowledgement Payload.
+
+.in 5
+.nf
+                     1                   2                   3
+ 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
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+|                    Packet Sequence Number                     |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+.in 3
+
+.ce
+Figure 24:  Resume Client Payload
+
+
+.in 6
+o Packet Sequence Number (4 bytes) - The packet sequence number
+  of the packet that had the Acknowledgement flag set.
+.in 3
+
 
 .ti 0
 2.4 SILC ID Types
@@ -2831,8 +2885,8 @@ special packet types and their parsing.
 2.11 Packet Routing
 
 Routers are the primary entities in the SILC network that takes care
-of packet routing.  However, normal servers routes packets as well, for
-example, when they are routing channel message to the local clients.
+of packet routing.  Normal servers performs packet forwarding, for
+example, when they are forwarding channel message to the local clients.
 Routing is quite simple as every packet tells the true origin and the
 true destination of the packet.
 
@@ -2861,9 +2915,9 @@ the router it came from.
 When routing for example private messages they should be routed to the
 shortest route always to reach the destination client as fast as possible.
 
-For server which receives a packet to be routed to an entity that is
+For server which receives a packet to be forwarded to an entity that is
 indirectly connected to the sender, the server MUST check whether that
-particular packet type is allowed to be routed to that destination.  Not
+particular packet type is allowed to be sent to that destination.  Not
 all packets may be sent by some odd entity to for example a local client,
 or to some remote server or router, that is indirectly connected to the
 sender.  See section 2.3 SILC Packet Types and paragraph about indirectly
@@ -2931,12 +2985,12 @@ security of this protocol.
 4 References
 
 [SILC1]      Riikonen, P., "Secure Internet Live Conferencing (SILC),
-             Protocol Specification", Internet Draft, May 2002.
+             Protocol Specification", Internet Draft, January 2007.
 
 [SILC3]      Riikonen, P., "SILC Key Exchange and Authentication
-             Protocols", Internet Draft, May 2002.
+             Protocols", Internet Draft, January 2007.
 
-[SILC4]      Riikonen, P., "SILC Commands", Internet Draft, May 2002.
+[SILC4]      Riikonen, P., "SILC Commands", Internet Draft, January 2007.
 
 [IRC]        Oikarinen, J., and Reed D., "Internet Relay Chat Protocol",
              RFC 1459, May 1993.
@@ -3003,8 +3057,7 @@ security of this protocol.
 
 .nf
 Pekka Riikonen
-Snellmaninkatu 34 A 15
-70100 Kuopio
+Helsinki
 Finland
 
 EMail: priikone@iki.fi
index f5c95784ae4d2d1ad1dfc1879b044666bc71ec5c..40270cad245ac0aa0321072988d9edbd1f55f9d0 100644 (file)
@@ -8,7 +8,7 @@
 .ds RF FORMFEED[Page %]
 .ds CF
 .ds LH Internet Draft
-.ds RH 11 February 2004
+.ds RH 15 January 2007
 .ds CH
 .na
 .hy 0
@@ -16,8 +16,8 @@
 .nf
 Network Working Group                                        P. Riikonen
 Internet-Draft
-draft-riikonen-silc-spec-09.txt                         XX
-Expires: XXX
+draft-riikonen-silc-spec-09.txt                          15 January 2007
+Expires: 15 July 2007
 
 .in 3
 
@@ -80,66 +80,66 @@ Table of Contents
   2.5 Router Connections ........................................  8
 3 SILC Specification ............................................  9
   3.1 Client ....................................................  9
-      3.1.1 Client ID ...........................................  9
-  3.2 Server .................................................... 10
+      3.1.1 Client ID ........................................... 10
+  3.2 Server .................................................... 11
       3.2.1 Server's Local ID List .............................. 11
       3.2.2 Server ID ........................................... 12
       3.2.3 SILC Server Ports ................................... 12
   3.3 Router .................................................... 13
       3.3.1 Router's Local ID List .............................. 13
       3.3.2 Router's Global ID List ............................. 14
-      3.3.3 Router's Server ID .................................. 14
+      3.3.3 Router's Server ID .................................. 15
   3.4 Channels .................................................. 15
       3.4.1 Channel ID .......................................... 16
-  3.5 Operators ................................................. 16
+  3.5 Operators ................................................. 17
   3.6 SILC Commands ............................................. 17
   3.7 SILC Packets .............................................. 17
-  3.8 Packet Encryption ......................................... 17
+  3.8 Packet Encryption ......................................... 18
       3.8.1 Determination of the Source and the Destination ..... 18
       3.8.2 Client To Client .................................... 19
       3.8.3 Client To Channel ................................... 20
       3.8.4 Server To Server .................................... 21
   3.9 Key Exchange And Authentication ........................... 21
-      3.9.1 Authentication Payload .............................. 21
-  3.10 Algorithms ............................................... 23
-      3.10.1 Ciphers ............................................ 23
+      3.9.1 Authentication Payload .............................. 22
+  3.10 Algorithms ............................................... 24
+      3.10.1 Ciphers ............................................ 24
              3.10.1.1 CBC Mode .................................. 24
-             3.10.1.2 CTR Mode .................................. 24
-             3.10.1.3 Randomized CBC Mode ....................... 26
-      3.10.2 Public Key Algorithms .............................. 26
-             3.10.2.1 Multi-Precision Integers .................. 27
-      3.10.3 Hash Functions ..................................... 27
-      3.10.4 MAC Algorithms ..................................... 27
-      3.10.5 Compression Algorithms ............................. 28
-  3.11 SILC Public Key .......................................... 28
-  3.12 SILC Version Detection ................................... 31
-  3.13 UTF-8 Strings in SILC .................................... 31
-      3.13.1 UTF-8 Identifier Strings ........................... 32
-  3.14 Backup Routers ........................................... 33
-      3.14.1 Switching to Backup Router ......................... 35
-      3.14.2 Resuming Primary Router ............................ 36
-4 SILC Procedures ............................................... 38
-  4.1 Creating Client Connection ................................ 38
-  4.2 Creating Server Connection ................................ 40
-      4.2.1 Announcing Clients, Channels and Servers ............ 40
-  4.3 Joining to a Channel ...................................... 42
-  4.4 Channel Key Generation .................................... 43
-  4.5 Private Message Sending and Reception ..................... 44
-  4.6 Private Message Key Generation ............................ 44
-  4.7 Channel Message Sending and Reception ..................... 45
-  4.8 Session Key Regeneration .................................. 46
-  4.9 Command Sending and Reception ............................. 46
-  4.10 Closing Connection ....................................... 47
-  4.11 Detaching and Resuming a Session ......................... 48
-  4.12 UDP/IP Connections ...................................... XXX
-5 Security Considerations ....................................... 49
-6 References .................................................... 50
-7 Author's Address .............................................. 52
-Appendix A ...................................................... 52
-Appendix B ...................................................... 54
-Appendix C ...................................................... XXX
-Appendix D ...................................................... XXX
-Full Copyright Statement ........................................ XXX
+             3.10.1.2 CTR Mode .................................. 25
+             3.10.1.3 Randomized CBC Mode ....................... 27
+      3.10.2 Public Key Algorithms .............................. 27
+             3.10.2.1 Multi-Precision Integers .................. 28
+      3.10.3 Hash Functions ..................................... 28
+      3.10.4 MAC Algorithms ..................................... 28
+      3.10.5 Compression Algorithms ............................. 29
+  3.11 SILC Public Key .......................................... 29
+  3.12 SILC Version Detection ................................... 32
+  3.13 UTF-8 Strings in SILC .................................... 33
+      3.13.1 UTF-8 Identifier Strings ........................... 33
+  3.14 Backup Routers ........................................... 34
+      3.14.1 Switching to Backup Router ......................... 36
+      3.14.2 Resuming Primary Router ............................ 37
+4 SILC Procedures ............................................... 39
+  4.1 Creating Client Connection ................................ 39
+  4.2 Creating Server Connection ................................ 41
+      4.2.1 Announcing Clients, Channels and Servers ............ 42
+  4.3 Joining to a Channel ...................................... 43
+  4.4 Channel Key Generation .................................... 44
+  4.5 Private Message Sending and Reception ..................... 45
+  4.6 Private Message Key Generation ............................ 46
+  4.7 Channel Message Sending and Reception ..................... 47
+  4.8 Session Key Regeneration .................................. 47
+  4.9 Command Sending and Reception ............................. 48
+  4.10 Closing Connection ....................................... 49
+  4.11 Detaching and Resuming a Session ......................... 49
+  4.12 UDP/IP Connections ......................................  51
+5 Security Considerations ....................................... 52
+6 References .................................................... 53
+7 Author's Address .............................................. 55
+Appendix A ...................................................... 55
+Appendix B ...................................................... 56
+Appendix C ...................................................... 57
+Appendix D ...................................................... 57
+Full Copyright Statement ........................................ 58
 
 .ti 0
 List of Figures
@@ -210,7 +210,7 @@ interpreted as described in [RFC2119].
 This section describes various SILC protocol concepts that forms the
 actual protocol, and in the end, the actual SILC network.  The mission
 of the protocol is to deliver messages from clients to other clients
-through routers and servers in secure manner.  The messages may also
+through servers and routers in secure manner.  The messages may also
 be delivered from one client to many clients forming a group, also
 known as a channel.
 
@@ -235,11 +235,11 @@ SILC servers and SILC router servers.
 A difference between normal server and router server is that routers
 knows all global information and keep the global network state up to date.
 They also do the actual routing of the messages to the correct receiver
-between other cells.  Normal servers knows only local information and
-receive global information only when it is needed.  They do not need to
-keep the global network state up to date.  This makes the network faster
-and scalable as there are less servers that needs to maintain global
-network state.
+within the cell and between other cells.  Normal servers knows only local
+information and receive global information only when it is needed.  They do
+not need to keep the global network state up to date.  This makes the
+network faster and scalable as there are less servers that needs to
+maintain global network state.
 
 This, on the other hand, leads into a cellular like network, where
 routers are in the center of the cell and servers are connected to the
@@ -279,12 +279,14 @@ routes the messages to the other servers in the cell.  Router servers
 on the other hand may connect to other routers to form the actual SILC
 network, as seen in above figure.  However, router is also able to act
 as normal SILC server; clients may connect to it the same way as to
-normal SILC server.  Normal server also cannot have active connections
-to more than one router.  Normal server cannot be connected to two
-different cells.  Router servers, on the other hand, may have as many
-router to router connections as needed.  Other direct routes between
-other routers is also possible in addition of the mandatory ring
-connections.  This leads into a hybrid ring-mesh network topology.
+normal SILC server.  This, however is not a requirement and if needed
+router servers may be hidden from users by not allowing direct client
+connections.  Normal server also cannot have active connections to more
+than one router.  Normal server cannot be connected to two different
+cells.  Router servers, on the other hand, may have as many router to
+router connections as needed.  Other direct routes between other routers
+is also possible in addition of the mandatory ring connections.  This
+leads into a hybrid ring-mesh network topology.
 
 There are many issues in this network topology that needs to be careful
 about.  Issues like routing, the size of the cells, the number of the
@@ -375,6 +377,8 @@ when clients are connected directly to the routers and the messages
 are delivered from one router to the other.
 
 
+
+
 .ti 0
 2.4 Channel Communication
 
@@ -423,9 +427,10 @@ Figure 4:  Router Connections
 
 Example:  Network with three routers.  Router 1. uses Router 2. as its
           primary router.  Router 2. uses Router 3. as its primary router,
-          and Router 3. uses Router 1. as its primary router.  There may
-          be other direct connections between the routers but they must
-          not be used as primary routes.
+          and Router 3. uses Router 1. as its primary router.  When there
+          are four or more routers in th enetwork, there may be other
+          direct connections between the routers but they must not be used
+          as primary routes.
 
 The above example is applicable to any amount of routers in the network
 except for two routers.  If there are only two routers in the network both
@@ -529,7 +534,8 @@ the nickname.  It could be possible to have same truncated hash value
 for two different nicknames.  However, this is not expected to happen
 nor cause any serious problems if it would occur.  Nicknames are usually
 logical and it is unlikely to have two distinct logical nicknames
-produce same truncated hash value.
+produce same truncated hash value.  Use of MD5 in nickname hash is not
+a security feature.
 
 
 .ti 0
@@ -651,10 +657,10 @@ as they could have been set up by untrusted party.
 
 Router server in SILC network is responsible for keeping the cell together
 and routing messages to other servers and to other routers.  Router server
-is also a normal server thus clients may connect to it as it would be
-just normal SILC server.
+may also act as normal server when clients may connect to it.  This is not
+requirement and router servers may be hidden from clients.
 
-However, router servers has a lot of important tasks that normal servers
+However, router servers have a lot of important tasks that normal servers
 do not have.  Router server knows everything and keeps the global state.
 They know all clients currently on SILC, all servers and routers and all
 channels in SILC.  Routers are the only servers in SILC that care about
@@ -737,6 +743,8 @@ channel list       - All channels in SILC
 
 
 
+
+
 .ti 0
 3.3.3 Router's Server ID
 
@@ -826,7 +834,7 @@ follows.
 
 o Router's Server ID IP address - Indicates the IP address of
   the router of the cell where this channel is created.  This is
-  taken from the router's Server ID.  This way SILC router knows
+  taken from the router's Server ID.  This way SILC routers know
   where this channel resides in the SILC network.
 
 o Router's Server ID port - Indicates the port of the channel on
@@ -839,6 +847,7 @@ o Random number or counter - To further randomize the Channel ID.
 .in 3
 
 
+
 .ti 0
 3.5 Operators
 
@@ -939,7 +948,7 @@ to be able to route the packets to correct receiver.  This information
 is available in the SILC Packet Header which is included in all packets
 sent in SILC network.  The SILC Packet Header is described in [SILC2].
 
-The header MUST be encrypted with the session key of whom is the next
+The header MUST be encrypted with the session key of who is the next
 receiver of the packet along the route.  The receiver of the packet, for
 example a router along the route, is able to determine the sender and the
 destination of the packet by decrypting the SILC Packet Header and
@@ -959,8 +968,8 @@ valid and correct ID for that sender.
 Note that the packet and the packet header may be encrypted with
 different keys.  For example, packets to channels are encrypted with
 the channel key, however, the header is encrypted with the session key
-as described above.  However, the header and the packet may be encrypted
-with same key.  This is the case, for example, with command packets.
+as described above.  Most other packets have both header and packet
+payload encrypted with the same key, such as command packets.
 
 
 .ti 0
@@ -1002,8 +1011,8 @@ Example:  Private message from client to another client on different
 
 o Client 1 sends encrypted packet to its server.  The packet header
   is encrypted with the session key shared between the client and
-  server, and the private message is encrypted with the private
-  message delivery key shared between clients.
+  server, and the private message payload is encrypted with the
+  private message delivery key shared between clients.
 
 o Server determines the destination of the packet and sends the
   packet to the router.  Header is encrypted with the session key.
@@ -1089,7 +1098,7 @@ to connect to server without explicit authentication.  Servers are
 REQUIRED to use authentication protocol when connecting.  The
 authentication may be based on passphrase (pre-shared secret) or public
 key based on digital signatures.  All passphrases sent in SILC protocol
-MUST be UTF-8 [RFC3629] encoded. The connection authentication protocol
+MUST be UTF-8 [RFC3629] encoded.  The connection authentication protocol
 is described in detail in [SILC3].
 
 
@@ -1188,7 +1197,8 @@ The receiver will compute the signature using the random data received
 in the payload, the ID associated to the connection and the public key
 (or certificate) received in the SKE protocol.  After computing the
 receiver MUST verify the signature.  Also in case of public key
-authentication this payload is encrypted.
+authentication this payload is always encrypted.  This payload is
+always sent as part of some other payload.
 
 
 .ti 0
@@ -1232,7 +1242,7 @@ defined to be used in SILC by using the same name format as above.
 
 Algorithm "none" does not perform any encryption process at all and
 thus is not recommended to be used.  It is recommended that no client
-or server implementation would accept none algorithm except in special
+or server implementation would accept "none" algorithm except in special
 debugging mode.
 
 
@@ -1325,15 +1335,15 @@ Also, the key material used with CTR mode MUST be fresh key material.
 Static keys (pre-shared keys) MUST NOT be used with CTR mode.  For this
 reason using CTR mode to encrypt for example channel messages or private
 messages with a pre-shared key is inappropriate.  For private messages,
-the Key Agreement could be performed to produce fresh key material.
+the Key Agreement [SILC2] could be performed to produce fresh key material.
 
 If the IV Included flag was negotiated in SKE, or CTR mode is used to
-protect channel messages where the counter block will be included in the
-Message Payload, the Initialization Vector (IV) to be used is a 64-bit
-block containing randomness and packet counter.  Also note, that in this
-case the decryption process is not stateful and receiver cannot
-precompute the key stream.  Hence, the Initialization Vector (IV) when
-CTR mode is used is as follows.
+protect channel messages where the IV will be included in the Message
+Payload, the Initialization Vector (IV) to be used is a 64-bit block
+containing randomness and packet counter.  Also note, that in this case
+the decryption process is not stateful and receiver cannot precompute
+the key stream.  Hence, the Initialization Vector (IV) when CTR mode is
+used is as follows.
 
 .in 5
 .nf
@@ -1391,38 +1401,42 @@ dss        DSS  (OPTIONAL)
 .in 3
 
 DSS is described in [Menezes].  The RSA MUST be implemented according
-PKCS #1 [PKCS1].  The mandatory PKCS #1 implementation in SILC MUST be
-compliant to either PKCS #1 version 1.5 or newer with the following
-notes: The signature encoding is always in same format as the encryption
-encoding regardless of the PKCS #1 version.  The signature with appendix
-(with hash algorithm OID in the data) MUST NOT be used in the SILC.  The
-rationale for this is that there is no binding between the PKCS #1 OIDs
-and the hash algorithms used in the SILC protocol.  Hence, the encoding
-is always in PKCS #1 version 1.5 format.
+PKCS #1 [PKCS1].  When using SILC Public Key version 2 the PKCS #1
+implementation MUST be compliant with PKCS #1 version 1.5.  The signatures
+are computed with appendix; the hash OID is included in the signature.
+The user may always select the hash algorithm for the signatures.  When
+using SILC Public Key version 1 the PKCS #1 implementation MUST be
+compliant with PKCS #1 version 1.5 where signatures are computed without
+appendix; the hash OID is not present in the signature.  The hash
+algorithm used is specified separately or the default hash algorithm is
+used, as defined below.
 
 Additional public key algorithms MAY be defined to be used in SILC.
 
 When signatures are computed in SILC the computing of the signature is
-represented as sign().  The signature computing procedure is dependent
-of the public key algorithm, and the public key or certificate encoding.
+denoted as sign().  The signature computing procedure is dependent of
+the public key algorithm, and the public key or certificate encoding.
 When using SILC public key the signature is computed as described in
 previous paragraph for RSA and DSS keys.  If the hash function is not
-specified separately for signing process SHA-1 MUST be used.  When using
+specified separately for signing process SHA-1 MUST be used, except with
+SILC public key version 2 and RSA algorithm when the user MAY always
+select the hash algorithm.  In this case the hash algorithm is included
+in the signature and can be retrieved during verification.  When using
 SSH2 public keys the signature is computed as described in [SSH-TRANS].
 When using X.509 version 3 certificates the signature is computed as
 described in [PKCS7].  When using OpenPGP certificates the signature is
-computed as described in [PGP].
+computed as described in [PGP] and the PGP signature type used is 0x00.
 
 
 .ti 0
 3.10.2.1 Multi-Precision Integers
 
 Multi-Precision (MP) integers in SILC are encoded and decoded as defined
-in PKCS #1 [PKCS1].  MP integers are unsigned, encoded with desired octet
-length.  This means that if the octet length is more than the actual
-length of the integer one or more leading zero octets will appear at the
-start of the encoding.  The actual length of the integer is the bit size
-of the integer not counting any leading zero bits.
+in PKCS #1 [PKCS1].  MP integers are unsigned, encoded with the exact
+octet length of the integer.  No extra leading zero octets may appear.
+The actual length of the integer is the bit size of the integer not
+counting any leading zero bits.  The octet length is derived by calculating
+(bit_length + 7) / 8.
 
 
 .ti 0
@@ -1435,8 +1449,9 @@ in the [SILC3].
 The following Hash algorithm are defined in SILC protocol:
 
 .in 6
-sha1             SHA-1, length = 20      (REQUIRED)
-md5              MD5, length = 16        (RECOMMENDED)
+sha1             SHA-1, length = 20 bytes       (REQUIRED)
+sha256           SHA-256, length = 32 bytes     (RECOMMENDED)
+md5              MD5, length = 16 bytes         (RECOMMENDED)
 .in 3
 
 
@@ -1450,11 +1465,13 @@ MAC for a packet.
 The following MAC algorithms are defined in SILC protocol:
 
 .in 6
-hmac-sha1-96     HMAC-SHA1, length = 12 bytes  (REQUIRED)
-hmac-md5-96      HMAC-MD5, length = 12 bytes   (OPTIONAL)
-hmac-sha1        HMAC-SHA1, length = 20 bytes  (OPTIONAL)
-hmac-md5         HMAC-MD5, length = 16 bytes   (OPTIONAL)
-none             No MAC                        (OPTIONAL)
+hmac-sha1-96     HMAC-SHA1, length = 12 bytes   (REQUIRED)
+hmac-sha256-96   HMAC-SHA256, length = 12 bytes (RECOMMENDED)
+hmac-md5-96      HMAC-MD5, length = 12 bytes    (OPTIONAL)
+hmac-sha1        HMAC-SHA1, length = 20 bytes   (OPTIONAL)
+hmac-sha256      HMAC-SHA256, length = 32 bytes (OPTIONAL)
+hmac-md5         HMAC-MD5, length = 16 bytes    (OPTIONAL)
+none             No MAC                         (OPTIONAL)
 .in 3
 
 The "none" MAC is not recommended to be used as the packet is not
@@ -1464,7 +1481,8 @@ mode.
 
 The HMAC algorithm is described in [HMAC].  The hash algorithms used
 in HMACs, the SHA-1 is described in [RFC3174] and MD5 is described
-in [RFC1321].
+in [RFC1321].  The SHA-256 algorithm and its used with HMAC is described
+in [SHA256].
 
 Additional MAC algorithms MAY be defined to be used in SILC.
 
@@ -1550,30 +1568,30 @@ o Identifier Length (2 bytes) - Indicates the length of
   the Identifier field, not including this field.
 
 o Identifier (variable length) - Indicates the identifier
-  of the public key.  This data can be used to identify
-  the owner of the key.  The identifier is of the following
+  of the public key.  This data can be used to identify the
+  owner of the key.  The identifier may be of the following
   format:
 
-     UN   User name
-     HN   Host name or IP address
-     RN   Real name
-     E    EMail address
-     O    Organization
-     C    Country
-
+     UN     User name
+     HN     Host name or IP address
+     RN     Real name
+     E      EMail address
+     O      Organization
+     C      Country
+     V      Version
 
   Examples of an identifier:
 
     `UN=priikone, HN=poseidon.pspt.fi, E=priikone@poseidon.pspt.fi'
 
-    `UN=sam, HN=dummy.fi, RN=Sammy Sam, O=Company XYZ, C=Finland'
+    `UN=sam, HN=dummy.fi, RN=Sammy Sam, C=Finland, V=2'
 
   At least user name (UN) and host name (HN) MUST be provided as
   identifier.  The fields are separated by commas (`,').  If
   comma is in the identifier string it must be escaped as `\\,',
   for example, `O=Company XYZ\\, Inc.'.  Other characters that
   require escaping are listed in [RFC2253] and are to be escaped
-  as defined therein.
+  as defined therein.  The Version (V) may only be a decimal digit.
 
 o Public Data (variable length) - Includes the actual
   public data of the public key.
@@ -1606,6 +1624,11 @@ o Public Data (variable length) - Includes the actual
   field if they are used.
 .in 3
 
+The SILC Public Key is version is 2.  If the Version (V) identifier is
+not present the SILC Public Key version is expected to be 1.  All new
+implementations SHOULD support version 1 but SHOULD only generate version 2.
+In this case the Version (V) identifier MUST be present.
+
 All fields in the public key are in MSB (most significant byte first)
 order.  All strings in the public key MUST be UTF-8 encoded.
 
@@ -1616,6 +1639,10 @@ However, this SILC specification does not use these names directly, and
 they are defined here for external protocols (protocols that may like
 to use SILC Public Key).
 
+A fingerprint from SILC Public Key is computed from the whole encoded
+public key data block.  All fields are included in computation.  Compliant
+implementations MUST support computing a 160-bit SHA-1 fingerprint.
+
 
 .ti 0
 3.12 SILC Version Detection
@@ -1799,7 +1826,8 @@ be configured accordingly and care must be taken when configuring the
 backup routers, servers and other routers in the network.
 
 It must be noted that some of the channel messages and private messages
-may be lost during the switch to the backup router.  The announcements
+may be lost during the switch to the backup router, unless the message
+flag SILC_MESSAGE_FLAG_ACK is set in the message.  The announcements
 assure that the state of the network is not lost during the switch.
 
 It is RECOMMENDED that there would be at least one backup router in
@@ -1850,6 +1878,9 @@ router, but must try to establish connection back to the primary router.
 If the action is allowed type value 21 is sent back to the server from
 the backup router.  It is RECOMMENDED that implementations use the
 SILC_COMMAND_PING command to detect whether primary router is responsive.
+If the backup router notices that the primary router is unresponsive
+it SHOULD NOT start sending data to server links before the server has
+sent the SILC_PACKET_RESUME_ROUTER with type value 21.
 
 The servers connected to the backup router must then announce their
 clients, channels, channel users, channel user modes, channel modes,
@@ -2090,6 +2121,8 @@ using its own Server ID as Source ID in SILC Packet Header and the
 router's Server ID as Destination when communicating with the router.
 
 
+
+
 .ti 0
 4.2.1 Announcing Clients, Channels and Servers
 
@@ -2256,15 +2289,16 @@ time, and may still be sending messages encrypted with the old key.
 
 When client receives the SILC_PACKET_CHANNEL_KEY packet with the
 Channel Key Payload it MUST process the key data to create encryption
-and decryption key, and to create the HMAC key that is used to compute
+and decryption key, and to create the MAC key that is used to compute
 the MACs of the channel messages.  The processing is as follows:
 
   channel_key  = raw key data
-  HMAC key     = hash(raw key data)
+  MAC key      = hash(raw key data)
 
 The raw key data is the key data received in the Channel Key Payload.
-The hash() function is the hash function used in the HMAC of the channel.
-Note that the server also MUST save the channel key.
+It is used for both encryption and decryption.  The hash() is the hash
+function used with the HMAC of the channel.  Note that the server also
+MUST save the channel key.
 
 
 .ti 0
@@ -2549,6 +2583,7 @@ sessions.  It is RECOMMENDED that the detached sessions would be
 persistent as long as the server is running.
 
 
+
 .ti 0
 4.12 UDP/IP Connections
 
@@ -2610,10 +2645,10 @@ using if they wish to do so.
 
 It however must be noted that if the client requires absolute security
 by not trusting any of the servers or routers in the SILC Network, it can
-be accomplished by negotiating private keys outside the SILC Network,
-either using SKE or some other key exchange protocol, or to use some
-other external means for distributing the keys.  This applies for all
-messages, private messages and channel messages.
+be accomplished by negotiating private secret keys outside the SILC
+Network, either using SKE or some other key exchange protocol, or to use
+some other external means for distributing the keys.  This applies for
+all messages, private messages and channel messages.
 
 It is important to note that SILC, like any other security protocol, is
 not a foolproof system; the SILC servers and routers could very well be
@@ -2643,12 +2678,12 @@ should have a forum to discuss the cell management issues.
 6 References
 
 [SILC2]      Riikonen, P., "SILC Packet Protocol", Internet Draft,
-             May 2002.
+             January 2007.
 
 [SILC3]      Riikonen, P., "SILC Key Exchange and Authentication
-             Protocols", Internet Draft, May 2002.
+             Protocols", Internet Draft, January 2007.
 
-[SILC4]      Riikonen, P., "SILC Commands", Internet Draft, May 2002.
+[SILC4]      Riikonen, P., "SILC Commands", Internet Draft, January 2007.
 
 [IRC]        Oikarinen, J., and Reed D., "Internet Relay Chat Protocol",
              RFC 1459, May 1993.
@@ -2722,14 +2757,17 @@ should have a forum to discuss the cell management issues.
 [RFC3454]    Hoffman, P., et al., "Preparation of Internationalized
              Strings ("stringprep")", RFC 3454, December 2002.
 
+[SHA256]     Eastlake 3rd, D., et al., "US Secure Hash Algorithms (SHA
+             and HMAC-SHA)", RFC 4634, July 2006.
+
+
 
 .ti 0
 7 Author's Address
 
 .nf
 Pekka Riikonen
-Snellmaninkatu 34 A 15
-70100 Kuopio
+Helsinki
 Finland
 
 EMail: priikone@iki.fi
index 1b366a7a0c63513cfa73b1d189bd06874c492d5e..3f7d499b1be62b6ce9c33c4ceebc805be4c855f3 100644 (file)
@@ -197,7 +197,8 @@ SilcArgumentPayload invite_list
 <td><small>
 Called after killing a client.  Returns the client that was killed.
 The `client_entry' may be NULL.  The `client_entry' will become invalid
-after the command reply has returned from application.
+after the command reply has returned from application.  The
+SILC_NOTIFY_TYPE_KILLED will not be delivered for clients that you killed.
 </td>
 <td width="50%"><small>SilcClientEntry client_entry
 </td>