.ds RF FORMFEED[Page %]
.ds CF
.ds LH Internet Draft
-.ds RH 28 June 2000
+.ds RH 13 September 2000
.ds CH
.na
.hy 0
.nf
Network Working Group P. Riikonen
Internet-Draft
-draft-riikonen-silc-spec-00.txt 28 June 2000
-Expires: 28 Jan 2001
+draft-riikonen-silc-spec-00.txt 13 September 2000
+Expires: 13 May 2001
.in 3
3.10.3 MAC Algorithms ..................................... 20
3.10.4 Compression Algorithms ............................. 21
3.11 SILC Public Key .......................................... 21
+ 3.12 SILC Version Detection ................................... 24
4 SILC Procedures ............................................... 24
4.1 Creating Client Connection ................................ 24
4.2 Creating Server Connection ................................ 25
client is coming from. The IP address hence equals the
server IP address where to the client has connected.
-o Random number - Random number to further unify the
+o Random number - Random number to further randomize the
Client ID. This makes it possible to have 2^8 same
nicknames from the same server IP address.
o Port - This is the port the server is binded to.
-o Random number - This is used to further unify the Server ID.
+o Random number - This is used to further randomize the Server ID.
.in 3
Collisions are not expected to happen in any conditions. The Server ID
.ti 0
3.2.3 SILC Server Ports
-SILC uses currently TCP port 334 on SILC network. However, this is not
-official port assigned for SILC. Official port has been requested by
-the IANA.
+Following ports has been assigned by IANA for the SILC protocol:
+
+.in 10
+silc 706/tcp SILC
+silc 706/udp SILC
+.in 3
If there are needs to create new SILC networks in the future the port
-numbers must be officially assigned by the IANA. Most convenience case
-would be to assign port numbers upwards from 334.
+numbers must be officially assigned by the IANA.
Server on network above privileged ports (>1023) should not be trusted
as they could have been set up by untrusted party.
o Router's Server ID port - Indicates the port of the channel on
the server. This is taken from the router's Server ID.
-o Random number - To further unify the Channel ID. This makes
+o Random number - To further randomize the Channel ID. This makes
sure that there are no collisions. This also means that
in a cell there can be 2^16 channels.
.in 3
order.
+.ti 0
+3.12 SILC Version Detection
+
+The version detection of both client and server is performed at the
+connection phase while executing the SILC Key Exchange protocol. The
+version identifier is exchanged between intiator and responder. The
+version identifier is of following format:
+
+.in 6
+SILC-<protocol version>-<software version>
+.in 3
+
+The version strings are of following format:
+
+.in 6
+protocol version = <major>.<minor>
+software version = <major>[.<minor>[.<build>]]
+.in 3
+
+Protocol version may provide both major and minor version. Currently
+implementations must set the protocol version and accept the protocol
+version as SILC-1.0-<sotware version>.
+
+Software version may provide major, minor and build version. The
+software version may be freely set and accepted.
+
+Thus, the version string could be, for example:
+
+.in 6
+SILC-1.0-1.2
+.in 3
+
+
.ti 0
4 SILC Procedures
None. This is reserved command and must not be sent.
- 2 SILC_COMMAND_WHOIS
+ 1 SILC_COMMAND_WHOIS
- Max Arguments: 2
- Arguments: (1) <nickname>[@<server>] (2) [<count>]
+ Max Arguments: 3
+ Arguments: (1) <nickname>[@<server>] (2) [<Client ID>]
+ (3) [<count>]
+
+ Whois command is used to query various information about specific
+ user. The user maybe 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 maybe 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.
- Whois. Whois command is used to query various information about
- specific user. The user maybe 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
- maybe 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.
+ It is also possible to search the user by Client ID. If <Client ID>
+ is provided server must use it as the search value instead of
+ the <nickname>.
To prevent miss-use of this service wildcards in the nickname
or in the servername are not permitted. It is not allowed
SILC_STATUS_ERR_TOO_MANY_PARAMS
- 3 SILC_COMMAND_WHOWAS
+ 2 SILC_COMMAND_WHOWAS
Max Arguments: 2
Arguments: (1) <nickname>[@<server>] (2) [<count>]
SILC_STATUS_ERR_TOO_MANY_PARAMS
- 4 SILC_COMMAND_IDENTIFY
+ 3 SILC_COMMAND_IDENTIFY
Max Arguments: 2
Arguments: (1) <nickname>[@<server>] (2) [<count>]
be based on specific nickname request.
Implementations may not want to give interface access to this
- commands as it is hardly a command that would be used a end user.
+ command as it is hardly a command that would be used a end user.
However, it must be implemented as it is used with private message
sending.
SILC_STATUS_ERR_TOO_MANY_PARAMS
- 5 SILC_COMMAND_NICK
+ 4 SILC_COMMAND_NICK
Max Arguments: 1
Arguments: (1) <nickname>
SILC_STATUS_ERR_TOO_MANY_PARAMS
- 6 SILC_COMMAND_LIST
+ 5 SILC_COMMAND_LIST
Max Arguments: 2
Arguments: (1) [<Channel ID>] [<server>]
Reply messages to the command:
- Max Arguments: 3
- Arguments: (1) <Status Payload> (2) <channel>
- (3) <topic>
+ Max Arguments: 4
+ Arguments: (1) <Status Payload> (2) <Channel ID>
+ (3) <channel> (4) <topic>
This command may reply with several command reply messages to form
a list of results. In this case the status payload will include
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 name and the topic of the
+ This command replies with Channel ID, name and the topic of the
channel. If the channel is private channel the <topic> includes
"*private*" string.
SILC_STATUS_ERR_NO_SUCH_SERVER
- 7 SILC_COMMAND_TOPIC
+ 6 SILC_COMMAND_TOPIC
Max Arguments: 2
Arguments: (1) <Channel ID> (2) [<server>]]
SILC_STATUS_ERR_NO_CHANNEL_PRIV
- 8 SILC_COMMAND_INVITE
+ 7 SILC_COMMAND_INVITE
Max Arguments: 2
- Arguments: (1) <Client ID> (2) <channel>
+ Arguments: (1) <Client ID> (2) <Channel ID>
This command is used to invite other clients to join to the
- channel. There is no requirement that the channel the target
- client is being invited to must exist or be a valid channel.
- The <Client ID> argument is the target client's ID that is being
- invited.
+ channel. 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. This command must fail if the requested channel does
+ not exist, the requested client 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.
Reply messages to the command:
-
Max Arguments: 2
Arguments: (1) <Status Payload>
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_CLIENT_ID
SILC_STATUS_ERR_TOO_MANY_PARAMS
- SILC_STATUS_ERR_NO_RECIPIENT
- SILC_STATUS_ERR_USER_ON_CHANNEL
+ 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
- 9 SILC_COMMAND_QUIT
+ 8 SILC_COMMAND_QUIT
Max Arguments: 1
Arguments: (1) [<quit message>]
This command does not reply anything.
- 10 SILC_COMMAND_KILL
+ 9 SILC_COMMAND_KILL
Max Arguments: 2
Arguments: (1) <Client ID> (2) [<comment>]
- 11 SILC_COMMAND_INFO
+ 10 SILC_COMMAND_INFO
Max Arguments: 1
Arguments: (1) [<server>]
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_ID
SILC_STATUS_ERR_NO_SUCH_SERVER
- 12 SILC_COMMAND_CONNECT
+ 11 SILC_COMMAND_CONNECT
Max Arguments: 2
Arguments: (1) <Server ID>
SILC_STATUS_ERR_NO_ROUTER_PRIV
- 13 SILC_COMMAND_PING
+ 12 SILC_COMMAND_PING
Max Arguments: 1
Arguments: (1) <Server ID>
- This command is used by clients to test the communication
- channel to its server if client suspects that the communication
- is not working correctly. The <Server ID> is the ID of the
- server the client is connected to.
+ 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:
SILC_STATUS_OK
SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
SILC_STATUS_ERR_TOO_MANY_PARAMS
- SILC_STATUS_ERR_NO_SUCH_SERVER_ID
+ SILC_STATUS_ERR_NO_SERVER_ID
+ SILC_STATUS_ERR_NO_SUCH_SERVER
SILC_STATUS_ERR_NOT_REGISTERED
- 14 SILC_COMMAND_OPER
+ 13 SILC_COMMAND_OPER
Max Arguments: 2
Arguments: (1) <username> (2) <authentication data>
SILC_STATUS_ERR_AUTH_FAILED
- 15 SILC_COMMAND_JOIN
+ 14 SILC_COMMAND_JOIN
Max Arguments: 3
Arguments: (1) <channel> (2) [<passphrase>]
SILC_STATUS_ERR_USER_ON_CHANNEL
- 16 SILC_COMMAND_MOTD
+ 15 SILC_COMMAND_MOTD
Max Arguments: 1
Arguments: (1) <server>
SILC_STATUS_ERR_NO_SUCH_SERVER
- 17 SILC_COMMAND_UMODE
+ 16 SILC_COMMAND_UMODE
Max Arguments: 2
Arguments: (1) <Client ID> (2) <client mode mask>
SILC_STATUS_ERR_NO_CLIENT_ID
- 18 SILC_COMMAND_CMODE
+ 17 SILC_COMMAND_CMODE
- Max Arguments: 6
+ Max Arguments: 8
Arguments: (1) <Channel ID> (2) <channel mode mask>
(3) [<user limit>] (4) [<passphrase>]
- (5) [<Client ID>] (6) [<cipher>[:<key len>]]
+ (5) [<ban mask>] (6) [<invite list>]
+ (7) [<Client ID>] (8) [<cipher>[:<key len>]]
This command is used by client to set or change channel flags on
a channel. Channel has several modes that set various properties
Typical implementation would use [+|-]b on user interface
to set/unset this mode.
+
+ 0x0100 SILC_CMODE_INVITE
+
+ Invite list has been set to the channel. The invite list
+ can be used to mark the clients that is able to join
+ channel without being invited when the channel is set to
+ be invite-only channel. The <invite list> argument is the
+ set invite mask. When unsetting entry from the invite list
+ the entry must be provided as argument. Channel founder and
+ channel operator may set/unset this mode.
+
+ Typical implementation would use [+|-]I on user interface
+ to set/unset this mode.
+
- 0x0100 SILC_CMODE_OPERATOR
+ 0x0200 SILC_CMODE_OPERATOR
Sets channel operator privileges on the channel for a
client on the channel. The <Client ID> argument is the
to set/unset this mode.
- 0x0200 SILC_CMODE_CIPHER
+ 0x0400 SILC_CMODE_CIPHER
Sets specific cipher to be used to protect channel
traffic. The <cipher> argument is the requested cipher.
- 19 SILC_COMMAND_KICK
+ 18 SILC_COMMAND_KICK
Max Arguments: 3
Arguments: (1) <channel> (2) <Client ID>
SILC_STATUS_ERR_NO_CLIENT_ID
- 20 SILC_COMMAND_RESTART
+ 19 SILC_COMMAND_RESTART
Max Arguments: 0
Arguments: None
SILC_STATUS_ERR_NO_SERVER_PRIV
- 21 SILC_COMMAND_CLOSE
+ 20 SILC_COMMAND_CLOSE
Max Arguments: 1
Arguments: (1) <Server ID>
SILC_STATUS_ERR_NO_SUCH_SERVER_ID
- 22 SILC_COMMAND_DIE
+ 21 SILC_COMMAND_DIE
Max Arguments: 0
Arguments: None
SILC_STATUS_ERR_NO_SERVER_PRIV
- 23 SILC_COMMAND_SILCOPER
+ 22 SILC_COMMAND_SILCOPER
Max Arguments: 2
Arguments: (1) <username> (2) <authentication data>
SILC_STATUS_ERR_AUTH_FAILED
- 24 SILC_COMMAND_LEAVE
+ 23 SILC_COMMAND_LEAVE
Max Arguments: 1
Arguments: (1) <Channel ID>
SILC_STATUS_ERR_NO_CHANNEL_ID
- 25 SILC_COMMAND_NAMES
+ 24 SILC_COMMAND_NAMES
Max Arguments: 1
Arguments: (1) <Channel ID>
Reply messages to the command:
- Max Arguments: 2
- Arguments: (1) <Status Payload> (2) <name list>
+ Max Arguments: 3
+ Arguments: (1) <Status Payload> (2) <Channel ID>
+ (3) <name list> (4) <Client ID list>
- This command replies with the comma separated list of users on
- the channel.
+ This command replies with the Channel ID of the requested channel,
+ comma separated list of users on the channel and Client ID list
+ of the users on the list. The Client ID list has Client ID's
+ of all users in the list. First Client ID in the list must be
+ the Client ID of the first user in <name list>. The Client ID
+ List is formed by adding Client ID's each after each. Note that
+ the Client ID list is binary data.
Status messages:
SILC_STATUS_ERR_NOT_ON_CHANNEL
- 26 - 254
+ 25 - 254
Currently undefined commands.
"No Channel ID given". Channel ID were expected as command
parameter but were not found.
- 19 SILC_STATUS_ERR_BAD_CLIENT_ID
+ 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.
- 20 SILC_STATUS_ERR_BAD_CHANNEL_ID
+ 21 SILC_STATUS_ERR_BAD_CHANNEL_ID
"Bad Channel ID". Channel ID provided were erroneous.
- 21 SILC_STATUS_ERR_NO_SUCH_CLIENT_ID
+ 22 SILC_STATUS_ERR_NO_SUCH_CLIENT_ID
"No such Client ID". Client ID provided does not exist.
- 22 SILC_STATUS_ERR_NO_SUCH_CHANNEL_ID
+ 23 SILC_STATUS_ERR_NO_SUCH_CHANNEL_ID
"No such Channel ID". Channel ID provided does not exist.
- 23 SILC_STATUS_ERR_NICKNAME_IN_USE
+ 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.
- 24 SILC_STATUS_ERR_NOT_ON_CHANNEL
+ 25 SILC_STATUS_ERR_NOT_ON_CHANNEL
"You are not on that channel". The command were specified for
client user is not currently on.
- 25 SILC_STATUS_ERR_USER_ON_CHANNEL
+ 26 SILC_STATUS_ERR_USER_ON_CHANNEL
"User already on channel". User were invited on channel they
already are on.
- 26 SILC_STATUS_ERR_NOT_REGISTERED
+ 27 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.
- 27 SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
+ 28 SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
"Not enough parameters". Command requires more parameters
than provided.
- 28 SILC_STATUS_ERR_TOO_MANY_PARAMS
+ 29 SILC_STATUS_ERR_TOO_MANY_PARAMS
"Too many parameters". Too many parameters were provided
for the command.
- 29 SILC_STATUS_ERR_PERM_DENIED
+ 30 SILC_STATUS_ERR_PERM_DENIED
"Your host is not among the privileged". The client tried to
register on server that does not allow this host to connect.
- 30 SILC_STATUS_ERR_BANNED_FROM_SERVER
+ 31 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.
- 31 SILC_STATUS_ERR_BAD_PASSWORD
+ 32 SILC_STATUS_ERR_BAD_PASSWORD
"Cannot join channel. Incorrect password". Password provided for
channel were not accepted.
- 32 SILC_STATUS_ERR_CHANNEL_IS_FULL
+ 33 SILC_STATUS_ERR_CHANNEL_IS_FULL
"Cannot join channel. Channel is full". The channel is full
and client cannot be joined to it.
- 33 SILC_STATUS_ERR_NOT_INVITED
+ 34 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.
- 34 SILC_STATUS_ERR_BANNED_FROM_CHANNEL
+ 35 SILC_STATUS_ERR_BANNED_FROM_CHANNEL
"Cannot join channel. You have been banned". The client has
been banned from the channel.
- 35 SILC_STATUS_ERR_UNKNOWN_MODE
+ 36 SILC_STATUS_ERR_UNKNOWN_MODE
"Unknown mode". Mode provided by the client were unknown to
the server.
- 36 SILC_STATUS_ERR_NOT_YOU
+ 37 SILC_STATUS_ERR_NOT_YOU
"Cannot change mode for other users". User tried to change
someone else's mode.
- 37 SILC_STATUS_ERR_NO_CHANNEL_PRIV
+ 38 SILC_STATUS_ERR_NO_CHANNEL_PRIV
"Permission denied. You are not channel operator". Command may
be executed only by channel operator.
- 38 SILC_STATUS_ERR_NO_SERVER_PRIV
+ 39 SILC_STATUS_ERR_NO_SERVER_PRIV
"Permission denied. You are not server operator". Command may
be executed only by server operator.
- 39 SILC_STATUS_ERR_NO_ROUTER_PRIV
+ 40 SILC_STATUS_ERR_NO_ROUTER_PRIV
"Permission denied. You are not SILC operator". Command may be
executed only by router (SILC) operator.
- 40 SILC_STATUS_ERR_BAD_NICKNAME
+ 41 SILC_STATUS_ERR_BAD_NICKNAME
"Bad nickname". Nickname requested contained illegal characters
or were malformed.
- 41 SILC_STATUS_ERR_BAD_CHANNEL
+ 42 SILC_STATUS_ERR_BAD_CHANNEL
"Bad channel name". Channel requested contained illegal characters
or were malformed.
- 42 SILC_STATUS_ERR_AUTH_FAILED
+ 43 SILC_STATUS_ERR_AUTH_FAILED
"Authentication failed". The authentication data sent as
argument were wrong and thus authentication failed.
EMail: priikone@poseidon.pspt.fi
-This Internet-Draft expires 28 Jan 2001
+This Internet-Draft expires 13 May 2001