From 05bbb383203065d518b3215f48941972265a716d Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Mon, 9 Feb 2004 17:35:59 +0000 Subject: [PATCH] udpates. --- TODO | 7 + configure.in.pre | 3 +- doc/draft-riikonen-silc-commands-06.nroff | 49 ++++-- doc/draft-riikonen-silc-pp-08.nroff | 19 ++- doc/draft-riikonen-silc-spec-08.nroff | 196 +++++++++++----------- 5 files changed, 150 insertions(+), 124 deletions(-) diff --git a/TODO b/TODO index 01f3d570..bf997e65 100644 --- a/TODO +++ b/TODO @@ -15,6 +15,13 @@ TODO for SILC Client 1.0 branch TODO for SILC Server 1.0 ======================== + o stringprep (RFC3454) for UTF-8 strings + all other UTF-8 string things. + + o to CMODE_CHANGE notify, and JOIN and CMODE command + replies. + + o Public key support to WATCH command. + o Check that founder key is distributed ok during backup resuming. o Testing diff --git a/configure.in.pre b/configure.in.pre index 04baa04e..39e7739a 100644 --- a/configure.in.pre +++ b/configure.in.pre @@ -3,7 +3,7 @@ # # Author: Pekka Riikonen # -# Copyright (C) 2000 - 2003 Pekka Riikonen +# Copyright (C) 2000 - 2004 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 @@ -1144,6 +1144,7 @@ lib/silcutil/win32/Makefile lib/silcutil/beos/Makefile lib/silcutil/os2/Makefile lib/silcutil/epoc/Makefile +lib/silcutil/tests/Makefile lib/silcsftp/Makefile lib/silcsftp/tests/Makefile doc/example_silcd.conf diff --git a/doc/draft-riikonen-silc-commands-06.nroff b/doc/draft-riikonen-silc-commands-06.nroff index 0c3a514b..57cf74a6 100644 --- a/doc/draft-riikonen-silc-commands-06.nroff +++ b/doc/draft-riikonen-silc-commands-06.nroff @@ -8,7 +8,7 @@ .ds RF FORMFEED[Page %] .ds CF .ds LH Internet Draft -.ds RH 4 February 2004 +.ds RH 11 February 2004 .ds CH .na .hy 0 @@ -16,8 +16,8 @@ .nf Network Working Group P. Riikonen Internet-Draft -draft-riikonen-silc-commands-06.txt 4 February 2004 -Expires: 4 August 2004 +draft-riikonen-silc-commands-06.txt 11 February 2004 +Expires: 11 August 2004 .in 3 @@ -997,7 +997,7 @@ List of all defined commands in SILC follows. Reply messages to the command: - Max Arguments: 16 + Max Arguments: 17 Arguments: (1) (2) (3) (4) (5) (6) @@ -1006,6 +1006,7 @@ List of all defined commands in SILC follows. (11) [] (12) (13) (14) (15) [] (16) [] + (17) [] This command replies with the channel name requested by the client, channel ID of the channel and topic of the channel @@ -1014,6 +1015,7 @@ List of all defined commands in SILC follows. which tells all the modes set on the channel. If the channel is created the mode mask is zero (0) and is 0x01. If ban mask and/or invite list is set they are sent as well. + The is the user limit on the channel, if one is set. The , and are the clients currently on the channel and their modes on the @@ -1480,22 +1482,23 @@ List of all defined commands in SILC follows. 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 was - not provided this command returns the mode mask, founder key - and channel public key list to the client. + 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: 5 + Max Arguments: 6 Arguments: (1) (2) (3) (4) [] - (5) [] + (5) [] (6) [] 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 is Argument List Payload and each argument includes - one public key. + one public key. The is the current user limit + on the channel, if one is set. Status messages: @@ -1786,9 +1789,9 @@ List of all defined commands in SILC follows. 22 SILC_COMMAND_WATCH - Max Arguments: 3 + Max Arguments: 4 Arguments: (1) (2) [] - (3) [] + (3) [] (4) [] This command is used to set up a watch for nickname. When a user in the network appears with the @@ -1800,15 +1803,27 @@ List of all defined commands in SILC follows. The 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. + 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 + 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 Argument List Payload. The is the Client ID of the sender of this command. - 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. - 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. diff --git a/doc/draft-riikonen-silc-pp-08.nroff b/doc/draft-riikonen-silc-pp-08.nroff index 9d98dbac..9cc4cab4 100644 --- a/doc/draft-riikonen-silc-pp-08.nroff +++ b/doc/draft-riikonen-silc-pp-08.nroff @@ -8,7 +8,7 @@ .ds RF FORMFEED[Page %] .ds CF .ds LH Internet Draft -.ds RH 4 February 2004 +.ds RH 11 February 2004 .ds CH .na .hy 0 @@ -16,8 +16,8 @@ .nf Network Working Group P. Riikonen Internet-Draft -draft-riikonen-silc-pp-08.txt 4 February 2004 -Expires: 4 August 2004 +draft-riikonen-silc-pp-08.txt 11 February 2004 +Expires: 11 August 2004 .in 3 @@ -1492,11 +1492,11 @@ certificates sent inside arguments are actually Public Key Payloads. to the clients which are joined on the channel which mode was changed. This packet is destined to the channel. - Max Arguments: 7 - Arguments: (1) (2) - (3) [] (4) <[hmac>] - (5) [] (6) [] - (7) [] + Max Arguments: 8 + Arguments: (1) (2) + (3) [] (4) <[hmac>] + (5) [] (6) [] + (7) [] (8) [] The is the ID (usually Client ID but it can be Server ID as well when the router is enforcing channel mode @@ -1511,7 +1511,8 @@ certificates sent inside arguments are actually Public Key Payloads. channel was set. All routers and servers that receive the packet MUST save the founder's public key so that the founder can reclaim the channel founder rights back for the channel on any - server in the network. + server in the network. The argument is present when + the user limit was set or changed on the channel. The is an Argument List Payload and it is used to add and/or remove channel public keys from the channel. Also, diff --git a/doc/draft-riikonen-silc-spec-08.nroff b/doc/draft-riikonen-silc-spec-08.nroff index afe56868..4c66a720 100644 --- a/doc/draft-riikonen-silc-spec-08.nroff +++ b/doc/draft-riikonen-silc-spec-08.nroff @@ -8,7 +8,7 @@ .ds RF FORMFEED[Page %] .ds CF .ds LH Internet Draft -.ds RH 4 February 2004 +.ds RH 11 February 2004 .ds CH .na .hy 0 @@ -16,8 +16,8 @@ .nf Network Working Group P. Riikonen Internet-Draft -draft-riikonen-silc-spec-08.txt 4 February 2004 -Expires: 4 August 2004 +draft-riikonen-silc-spec-08.txt 11 February 2004 +Expires: 11 August 2004 .in 3 @@ -114,7 +114,7 @@ Table of Contents 3.11 SILC Public Key .......................................... 29 3.12 SILC Version Detection ................................... 31 3.13 UTF-8 Strings in SILC .................................... XXXX - 3.13.1 UTF-8 Nicknames and Channel Names .................. XXXX + 3.13.1 UTF-8 Identifier Strings ........................... XXXX 3.14 Backup Routers ........................................... 31 3.14.1 Switching to Backup Router ......................... 33 3.14.2 Resuming Primary Router ............................ 34 @@ -506,17 +506,13 @@ o Random number or counter - Random number to further possible to have 2^8 same nicknames from the same server IP address. -o MD5 hash - MD5 hash value of the lowercase nickname is +o MD5 hash - MD5 hash value of the case folded nickname is truncated taking 88 bits from the start of the hash value. This hash value is used to search the user's Client ID - from the ID lists. Note that the nickname MUST be in - lowercase format before computing the hash value. Since - nicknames are UTF-8 encoded, some characters cannot be - converted to lower case. All upper case characters that - has a lowercase alternative in the Unicode standard MUST - be converted to lowercase. Note that the conversion MUST - be done without regard to the current system character - subset to ensure interoperability. + from the ID lists. Note that the nickname MUST be prepared + using the stringprep [RFC3454] profile described in the + Appendix A before computing the MD5 hash. See also the + section 3.13.1 for more information. .in 3 Collisions could occur when more than 2^8 clients using same nickname @@ -1633,7 +1629,7 @@ SILC-1.2-2.4.5 Vendor Limited By default all strings that are sent in SILC protocol MUST be UTF-8 [RFC3269] encoded, unless otherwise defined. This means that any string -sent inside, for example, command, command reply, notify or any packet +sent inside for example, command, command reply, notify or any packet payload is UTF-8 encoded. Also nicknames, channel names, server names, and hostnames are UTF-8 encoded. This definition does not affect messages sent in SILC, as the Message Payload provides its own mechanism @@ -1646,16 +1642,7 @@ marked in the Unicode standard as control codes, noncharacters, reserved or private range characters, or any other illegal Unicode characters. Also the BOM (Byte-Order Mark) MUST NOT be used as byte order signature in UTF-8 encoded strings. A string containing these -characters MUST be treated as malformed UTF-8 encoding. See the -Appendix A for list of prohibited characters. - -Because of these limitations on the UTF-8 encoded strings the -implementation may need to have access to full Unicode implementation -to be able to validate the contents of the strings. This is especially -important in server implementation because server must verify that, -for example, nicknames does not include any prohibited characters. -Server also need to have the capability to convert character case from -upper case to lower case characters, when applicable. +characters MUST be treated as malformed UTF-8 encoding. The Unicode standard defines that malformed sequences shall be signalled by replacing the sequence with a replacement character. Even though, @@ -1669,8 +1656,7 @@ with SILC_COMMAND_NICK command, implementation is able to send error indication back to the command sender. It must be noted that on server implementation if a character sequence is merely outside of current character subset, but is otherwise valid character, it MUST NOT be -replaced by a replacement character. Server SHOULD inspect the UTF-8 -strings without regard to current system character subset. +replaced by a replacement character. On user interface where UTF-8 strings are displayed the implementation is RECOMMENDED to escape any character that it is unable to render @@ -1681,35 +1667,40 @@ if it does not cause practical problems to the implementation. .ti 0 -3.13.1 UTF-8 Nicknames and Channel Names +3.13.1 UTF-8 Identifier Strings + +Identifier strings are special strings in SILC protocol that require +more careful processing, than the general UTF-8 strings described in the +previous section. These strings include the nicknames, channel names, +server names, hostnames and some other identifier strings. These strings +are prepared using the stringprep [RFC3454] standard. The Appendix A +defines the stringprep profile for SILC identifier strings and conforming +implementation MUST use the profile to prepare any identifier string. -The nicknames and channel names are also UTF-8 encoded in SILC protocol. -As these strings may be used as message destination indicator on the -user interface certain additional limitations has been imposed to them. -In addition of general UTF-8 string limitations described in previous -section, the UTF-8 encoded nickname and channel name strings MUST NOT -include any characters that has been marked in the Unicode standard as -space characters, line and paragraph separators, mathematical symbol -characters (with exception of US-ASCII mathematical symbol characters), -currency symbol characters, or any other symbol characters (with -execption of CJK and other similar symbols), special characters or tags. -In addition nicknames and channel names MUST NOT include commas (','), -'@', '!' or any wildcard characters. See the Appendix A and Appendix B -for list of prohibited characters. +The stringprep profile describes how identifier strings are prepared, +what characters they may includes, and which characters are prohibited. +Identifier strings with prohibited characters MUST be treated as +malformed strings. -This definition means that these strings generally may only include -letters, numbers, most punctuation characters and some other characters. -For practical reasons most symbol characters and many other special -characters are prohibited. Conforming implementation MUST treat -strings with prohibited characters as malformed strings. +Because of the profile the identifier strings in SILC may generally +include only letters, numbers, most punctuation characters, and some +other characters. For practical reasons most symbol characters and +many other special characters are prohibited. All identifier strings +are case folded and comparing the identifier strings MUST be done as +caseless matching. Also, identifier strings may not include any +commas (','), '@', '!' or any wildcard characters, as defined in the +stringprep profile in Appendix A. -The length of a nickname string in SILC MUST NOT exceed 128 bytes. -The length of a channel name string in SILC MUST NOT exceed 256 bytes. -Since these strings are UTF-8 encoded the length of one character -may be longer than one byte. This means that the character length -of these strings may be shorter than the maximum length of the string -in bytes. The minimum length of these strings MUST be at least one -character, which may be one byte or more in length. +In general, the identifier strings does not have a maximum length. +However, the length of a nickname string MUST NOT exceed 128 bytes, and +the length of a channel name string MUST NOT exceed 256 bytes. Since +these strings are UTF-8 encoded the length of one character may be +longer than one byte. This means that the character length of these +strings may be shorter than the maximum length of the string in bytes. +The minimum length of an identifier string MUST be at least one character, +which may be one byte or more in length. Implementation MAY limit the +maximum length of an identifier string, with exception of the nickname +and channel name strings which has the explicit length definition. .ti 0 @@ -2647,6 +2638,9 @@ should have a forum to discuss the cell management issues. (v3): UTF-8 String Representation of Distinguished Names", RFC 2253, December 1997. +[RFC3454] Hoffman, P., et al., "Preparation of Internationalized + Strings ("stringprep")", RFC 3454, December 2002. + .ti 0 7 Author's Address @@ -2663,60 +2657,72 @@ EMail: priikone@iki.fi .ti 0 Appendix A -This appendix lists the generally prohibited characters in UTF-8 encoded -strings in SILC. The characters listed in this appendix MUST NOT appear -in any UTF-8 encoded string. When a new version of Unicode standard -defines new characters that are marked into the same category as the -characters listed in this appendix they are also prohibited. Implementor -SHOULD NOT trust the following list but should verify the actual list of -characters from the Unicode standard. +This appendix defines the stringprep [RFC3454] profile for string +identifiers in SILC protocol. Compliant implementation MUST use this +profile to prepare the identifier strings in the SILC protocol. The +profile defines the following as required by [RFC3454]. -Control codes -0000-001F 007F-009F +- Intended applicability of the profile: the following identifiers in + the SILC Protocol; nicknames, channel names, usernames, server names, + hostnames, service names, algorithm names and other security property + names [SILC3], and SILC Public Key name. -Noncharacters -FDD0-FDEF -0FFFE-0FFFF 1FFFE-1FFFF 2FFFE-2FFFF 3FFFE-3FFFF 4FFFE-4FFFF -5FFFE-5FFFF 6FFFE-6FFFF 7FFFE-7FFFF 8FFFE-8FFFF 9FFFE-9FFFF -AFFFE-AFFFF BFFFE-BFFFF CFFFE-CFFFF DFFFE-DFFFF EFFFE-EFFFF -FFFFE-FFFFF 10FFFE-10FFFF +- The character repertoire that is the input and output to + stringprep: Unicode 3.2 with the list of unassigned code points + being the Table A.1, as defined in [RFC3454]. -Surrogate codes -D800-DFFF +- The mapping tables used: the following tables are used, in order, + as defined in [RFC3454]. -Private characters -E000-F8FF F0000-FFFFD 100000-10FFFD + Table B.1 + Table B.2 -BOM as signature -FEFF + The mandatory case folding is done using the Table B.2 which includes + the characters for the normalization form KC. -Replacement character -FFFD +- The Unicode normalization used: the Unicode normalization form + KC is used, as defined in [RFC3454]. + +- The prohibited characters as output: the following tables are used + to prohibit characters, as defined in [RFC3454]; + + Table C.1.1 + Table C.1.2 + Table C.2.1 + Table C.2.2 + Table C.3 + Table C.4 + Table C.5 + Table C.6 + Table C.7 + Table C.8 + Table C.9 + +- Additional prohibited characters as output: in addition, the following + tables are used to prohibit characters, as defined in this document; + + Appendix B + +- The bidirectional string testing used: bidirectional string testing + is ignored in this profile. + +This profile is to be maintained in the IANA registry for stringprep +profiles. The name of this profile is "silc-identifier-prep" and this +document defines the profile. This document defines the first version of +this profile. -.ti 0 Appendix B -This appendix lists additional prohibited characters in UTF-8 encoded -nickname and channel name strings. The characters listed in this -appendix MUST NOT appear in UTF-8 encoded nickname and channel name -strings. When a new version of Unicode standard defines new characters -that are marked into the same category as the characters listed in this -appendix they are also prohibited. Implementor SHOULD NOT trust the -following list but should verify the actual list of characters from -the Unicode standard. +This appendix defines additional prohibited characters in the identifier +strings as defined in the stringprep profile in Appendix A. Note that +the prohibited character tables listed in the Appendix A may include some +of the same characters listed in this appendix as well. Reserved US-ASCII characters 0021 002A 002C 003F 0040 -Space characters -0020 00A0 1680 180E 2000-200B 202F 205F 3000 - -Line and paragraph separators -2028 2029 - -Symbol characters and other symbol like characters (with execption of -CJK and other similar symbols) +Symbol characters and other symbol like characters 00A2-00A9 00AC 00AE 00AF 00B0 00B1 00B4 00B6 00B8 00D7 00F7 02C2-02C5 02D2-02FF 0374 0375 0384 0385 03F6 0482 060E 060F 06E9 06FD 06FE 09F2 09F3 09FA 0AF1 0B70 0BF3-0BFA 0E3F @@ -2731,13 +2737,9 @@ CJK and other similar symbols) 312D-3130 318F 31B8-31FF 321D-321F 3244-325F 327C-327E 32B1-32BF 32CC-32CF 32FF 3377-337A 33DE-33DF 33FF 4DB6-4DFF 9FA6-9FFF A48D-A48F A4A2-A4A3 A4B4 A4C1 A4C5 A4C7-ABFF -D7A4-D7FF FA2E-FAFF FFE0-FFEE FFFC 10000-1007F 100080-100FF +D7A4-D7FF FA2E-FAFF FFE0-FFEE FFFC 10000-1007F 10080-100FF 10100-1013F 1D000-1D0FF 1D100-1D1FF 1D300-1D35F 1D400-1D7FF -Specials and tags -FFF0-FFFF -E0000-E007F - Other characters E0100-E01EF -- 2.24.0