X-Git-Url: http://git.silcnet.org/gitweb/?p=runtime.git;a=blobdiff_plain;f=README;h=82eacbb30c601fdd52cbce0649510687d7571d5d;hp=5b8b3e46138dee89ac6834ae18b23d8acd597034;hb=HEAD;hpb=fb8dbc2d9cd7ff5d197654f873ac18aa6ef9c5e3 diff --git a/README b/README index 5b8b3e46..82eacbb3 100644 --- a/README +++ b/README @@ -1,446 +1,26 @@ -SILC - Secure Internet Live Conferencing -======================================== +SILC Runtime Toolkit +==================== -SILC (Secure Internet Live Conferencing) is a protocol which provides -secure conferencing services in the Internet over insecure channel. -SILC is IRC like softwarre although internally they are very different. -Biggest similarity between SILC and IRC is that they both provide -conferencing services and that SILC has almost same commands as IRC. Other -than that they are nothing alike. Biggest differences are that SILC is -secure what IRC is not in any way. The network model is also entirely -different compared to IRC. +SILC Runtime Toolkit (SRT) provides useful utility functions for application +programmers. The SRT can be used as the sole and main runtime in any +application. It provides application main loop, hash table, lists, atomic +operations, threads, locks, queues, file descriptor stream, socket stream, +network routines, a finite state machine, memory pool, random number +generator, buffers, regular expressions, and many many other features. +The SRT natively supports multiple platforms; Unix/Linux, Windows, Mac OS +X and Symbian OS, and all APIs work identically or nearly identically on +all support platforms. The SRT and all of its APIs are entirely reentrant +and some APIs are completely thread safe. -Running SILC -============ - -After installing the SILC to the system the SILC client is started by -giving command: - - silc - -If you want to run with specific configuration file give -f option. - -To run the server you should configure the server first. To run the -server give the command: - - silcd - -This will launch the server on to the background. - - -SILC Commands -============= - - - /SERVER [[:]] - - Connects to remote SILC server. - - /NICK [] - - Changes/sets nickname. Note that in SILC there can be - multiple same nicknames. However, the logic on working - with multiple nicknames on user interface is pretty much - still missing. Also note that nicknames in SILC are - case-sensitive. - - /JOIN - - Joins to a channel. Channel names start with `#' - character. - - /LEAVE - - Leaves the channel. If /leave * is given the client - leaves the current channel. - - /CMODE +|- [{ }] - - Changes/sets channel mode. Most of the modes require - special privileges, such as channel operator or channel - founder privileges to work. The mode is added by adding - + before the option(s) and removed by adding - before - the option(s). Following modes are available: - - p Set/unset channel as private channel - s Set/unset channel as secret channel - k Set/unset that channel uses private channel key - i Set/unset channel as invite only channel - t Set/unset that only channel operator or - founder may set channel topic - l Set/unset channel's user limit - a Set/unset passphrase for channel that must - be provided when joining to the channel. - c Set/unset channel's cipher - h Set/unset channel's hmac - f <-pubkey| - Set/unset channel founder authentication. - Channel founder may set this mode so that - if the client leaves the channel it can - claim the founder rights when it returns - to the channel. If -pubkey is set then - the authentication will be done using the - client's public key. You can claim the - founder rights using the CUMODE command. - - Multiple modes can be set/unset at once if the modes does not - require any arguments. If mode requires an argument then only - one mode can be set at once. - - /CUMODE +|- [@] [-pubkey|] - - Changes/set user's mode on a channel. Most of the modes - require that the client who changes some client's mode must - be channel founder or channel operator. Following channel - user modes are available: - - a [@] - - Set/unset all modes (cannot be used to set - both founder and operator rights, can be used - only to remove both modes at once). - - f [@] [-pubkey|] - - Set/Unset channel founder. If the -pubkey - option or is provided then the - client is claiming the founder rights by - providing the channel founder authentication - data. If the -pubkey is provided then the - authentication is performed using the - client's public key. If you are channel - founder you can set the channel founder - authentication using CMODE command. - - o [@] - - Set/unset channel operator. Requires that - you are channel operator or channel founder. - - /UMODE +|- - - Sets/unsets user mode. Note that some of the modes the - client cannot set itself. The following user modes are - available: - - a Unset all modes - s Unset server operator privileges - r Unset router operator privileges - g Set/unset to be gone (or use /AWAY command) - - - /MSG - - Sends private message to remote client. Support for - handling multiple same nicknames with /MSG command is - still missing. - - /WHOIS [@] [] - - Gives a little information about a client. Support for - handling multiple same nicknames with this command is - still missing. - - /WHOWAS [@] [] - - Gives a little history information about a client. - - /INVITE [[@server>] - [+|-[[@[![@hostname>]]]]] - - Invites client to a channel or manages the invite list of - the channel. The first argument is used if an - client is invited to the channel. The second +|- - argument is used to either add or delete invite from the - channel's invite list. Wildcards may be used with this - command. - - /BAN [+|-[[@[![@hostname>]]]]] - - Manages the ban list of the channel. Wildcards may be used - with this command. You must be channel operator to be - able to use this command. - - /KICK [@] [] - - Kicks client from channel. You have to be at least channel - operator to be able to kick client from channel. Note: - you cannot kick channel founder even if you are channel - operator. - - /PING [] - - Pings server. Only locally connected server may be - pinged. - - /INFO [] - - Requests information about a server. If argument is - not specified current server is used. - - /AWAY [] - - Sets away message. When private message is received and - away message is set the client automatically replies to - the sender with the away message. To remove away message - give the command without arguments. - - /QUIT - - Quits session. Connection to remote server is closed. - - /CLEAR - - Clears current screen. - - /VERSION - - Shows client version. - - /OPER [] - - Obtains server operator privileges. - - /SILCOPER [] - - Obtains router operator privileges. - - /KILL [] - - Router operator can use this command to remove an client - from the SILC Network temporarily. - - /CONNECT [] - - Connects to server the remote . You must be - server operator to be able to do this. - - - /CLOSE [] - - Closes connection to the . You must be server - operator to be able to do this. - - /SHUTDOWN - - Shutdowns the server. You must be server operator to be - able to do this. - - /MOTD [] - - Display the MOTD of the server. If server is not specified - the current server is used. - - /LIST [] - - Lists all channels in the current server, or the channel - specified. If the channel cannot be found then all - channels are listed. - - /KEY msg|channel - set|unset|list|agreement|negotiate [] - - This command is used to set and unset private keys for - channels, set and unset private keys for private messages - with remote clients and to send key agreement requests and - negotiate the key agreement protocol with remote client. - The key agreement is supported only to negotiate private - message keys, it currently cannot be used to negotiate - private keys for channels, as it is not convenient for that - purpose. - - Types: - - msg The command is performed for private messages - affecting the . - - channel The command is performed for channel affecting - the . - - - Commands: - - set [ [] []] - - Set the key into use. If the is provided it - is used as the key material. If the is not - provided the negotiated key material is used. If - the negotiation has not been performed this command - has no effect. - - If the type is `msg' and the is `*' then - random key will be generated automatically. - - The may be set for both private message - and channel private keys and the may be set - only to the channel private keys. - - unset [] - - Unset the key. The private key is not used after - this command. The key must be set again or the key - material must be re-negotiated to be able to use - the private keys again. - - The channel may have several private keys set. The - can be used to indicate what key is being - unset. If it is not provided all keys are removed. - - - list List all private keys that has been set. - - If the type is `msg' and the is ´*' then - all private message keys that you've set will be - listed. - - agreement [ []] - - Send key agreement request to remote client. If - the is provided it is sent in the request. - The receiver may use the hostname to start the - key agreement. If the is also provided your - key agreement protocol server is bound to that - port. Note that it cannot be privileged port (<1023). - If the and is not provided then - the receiver will never initiate the key agreement. - In this case you must start the key agreement after - receiving the reply to the request, by giving the - /KEYAGR start command. - - This command may be used to send reply to the - remote client. When receiving empty key agreement - you can reply to the sender with the hostname and - port of your key agreement server with this command. - - negotiate [ []] - - This may be called to start the key agreement with - . This command has effect only if the - has replied to your key agreement request. - You will see a notify on the screen when the reply - arrives. The and is the hostname - and port of the remote client's key agreement - server. - - /ME - - This command is used to send an action to the channel. - This equals to CTCP's ACTION (IRC's /ME) command. - - /NOTICE - - This command is used to send for example informational - notice messages to the channel. - - /GETKEY - - Fetches remote client's public key. - -Features -======== - -Features to be included into the final release of SILC. [Note that the -current Developer's Version does not include all of these features, read -TODO file for more information.] - - o Normal conferencing services such as private messages, channels, - channel messages, etc. All traffic is secured and authenticated. - - o No unique nicknames. There can same nicknames in SILC without - collisions. SILC has unique Client ID's, Server ID's and Channel ID's - to assure that there are no collisions. - - o Secure key exchange and authentication protocol. SILC Key Exchange - protocol provides key material used in the SILC sessions in secure - manner. The protocol is immune for example to man-in-the-middle - attacks. The SILC Authentication protocol provides strong - authentication. Authentication may be based on passphrase or public - key (RSA) authentication. For clients there is an option not to - use authentication when connecting to servers. - - o All traffic is encrypted and authenticated using the best cryptographic - algorithms out there. Command messages, private messages and channel - messages are all protected by encryption. User can set private keys - for both private message and for channels so that even SILC servers do - not know the keys. Cipher keys are, by default, 128 bits in length and - public keys, by default, 1024 bits in length. - - o Supports data compression with GZIP to improve performance. - - o Supports SOCKS4 and SOCKS5 firewall traversal protocols. - - o SIM (SILC Module) support. Support for loading of shared objects at - run-time that provides new and extended features to both SILC client - and server. These can provide extra ciphers and extra features to - the software. - - o SILC client can be installed and used without root privileges. - - o SILC client can be configured by system wide configuration files but - with user specific configuration files as well. - +The SRT is free software and is dual-licensed with GNU GPL and BSD +licenses. History ======= -Even though SILC were released in summer 2000 to the public the idea and -the protocol itself is quite old. I got the idea about SILC in its -current form in the year 1996 and first lines of codes were written in -early 1997. This release is now third rewrite of the SILC. The very first -version were written in 1997 and it included SILC client and very very -preliminary SILC server. The server actually weren't usable but the -client looked pretty much the same as it does now. At that time the SILC -also included RSA implementation and 3DES implementation. The random -number generator that exists in this current release is actually based on -the RNG written in 1997. The RNG written in 1997, on the other hand, were -based on the SSH's random number generator. The RNG has been rewritten -twice since the first version. - -I stopped writing the SILC later in 1997 when I got busy at school and in -work. The pause lasted several months. The development resumed in 1998 -when my friend (Juha Räsänen) and I implemented ElGamal algorithm. I -rewrote some other parts as well. However, for the same reasons as -previously the development stopped again. I resumed the development later -in 1998 by doing rewrite of the SILC in C++. This was obviously a mistake -but at that time it seemed like a good idea. Again, in the winter 1999 I -got very busy writing my thesis and was forced to stop the development -again. I also, started a new job in the spring. - -Later, in 1999, I decided that this time I'm going to make it the right -way. C++ was obviously a bad choice so I decided to fall back to plain C -language. I also decided to do complete rewrite and started doing more -thorough planning of what the SILC actually should include. I also -decided that this time it is going to kill me before I stop the -development. I started writing SILC in the weekends and actually -everytime I had some spare time. I also started a new job but I didn't -let that get to my way. The result of this development effort is the -release now in public. - -I've learned a lot by doing the SILC. I guess, when I started it I wasn't -that good of a C programmer. That alone was a reason why SILC hasn't seen -the day of light before now. My programming style has also changed -dramatically during these years. Actually, it has changed couple times -since this last rewrite as well. However, the code style of current SILC -release is quite consistent (actually the coding style SILC has been -written now I've learned in my current job). - -There is probably over 85% of new code in this third rewrite. Rest has -just been copied from the old versions and only minor changes has been -made (like changed function names and overall coding style). I've -preserved the dates of the old files (dating back to 1997) that has -existed in some forms in the old versions. There is a lot of new code but -already I see a lot that needs rewriting. The development continues. - - -Contact -======= - -Feedback and comments are welcome. Bug reports should be sent to the -development mailing list. - -Official SILC project web site : http://silcnet.org/ -FTP archive for SILC project : ftp://silc.pspt.fi/pub/silc/ -Development mailing list address : silc-devel@lists.sourceforge.net - - Pekka Riikonen +The SRT used to be part of the SILC Toolkit; a software development kit for +Secure Internet Life Conferencing application programmers. The SRT was +split off from the SILC Toolkit into its own package due to its generic and +useful nature. Many APIs still present in SRT have been in use in the SILC +Toolkit since the year 2000.