5e7ca9a28db9c1f65f6055c0be283569f4e63237
[silc.git] / TODO
1 TODO for 1.1 And Beyond
2 =======================
3
4 NOTE: Any item that doesn't have (***DONE) in it, isn't done yet.  The
5 (***TESTING NEEDED) means that the item has been done but not yet properly
6 tested.
7
8
9 SILC Client     ****PARTLY DONE****
10 ===========
11
12  o Porting to new Toolkit API and new Client Library API
13
14  o Improve help files, especially /cmode, /cumode and /key.
15
16
17 lib/silcclient, The Client Library      ***PARTLY DONE****
18 ==================================
19
20  o silcclient.h clean up and API rewrites.
21
22  o silcclient_entry.h finishing, all entry relates APIs to this header.
23
24  o SilcChannelEntry, SilcServerEntry, SilcChannelUser, allocating, 
25    freeing, finding, etc. rewrite.  Also making them reference counted for 
26    multi threads use. (***DONE)
27
28  o Finish all the missing SILC packet processings, rewrites.
29
30  o The client_notify.c rewrite. (***TESTING NEEDED)
31
32  o Resuming to client_register.c (remove client_resume.c)
33    (***TESTING NEEDED)
34
35  o Rekey rewrite. (***DONE)
36
37  o Remove protocol.[ch]. (***DONE)
38
39  o File transfer rewrite.
40
41  o Connection auth request. (***DONE)
42
43  o Password auth test, public key auth test.
44
45  o Starting key exchange directly, rewrite. (***DONE)
46
47  o Channel messages, channel private keys, channel entires, channel 
48    search, etc. rewrite.
49
50  o For many APIs leave the hash context allocations to the caller instead
51    of using client->sha1hash and client->md5hash, or some kind of thread
52    safe (no locking) concept.
53
54  o Key agreement rewrite. (***TESTING NEEDED)
55
56  o Connecting to remote client (***DONE)
57
58  o peer-to-peer private messages
59
60  o Private message waiting API (in threads)
61
62  o client_attrs.c, attributes rewrite. (***TESTING NEEDED)
63
64  o No SilcBuffer lists back to application in command_reply operations.
65    Convert them all to real lists and/or structures for easier use.
66    (***DONE)
67
68  o Nickname formatting rewrite. (***TESTING NEEDED)
69
70  o UDP connections. (***TESTING NEEDED)
71
72  o in /cmode and /cumode with +r, maybe the public key and private key
73    could be just some "string", which would then match to "string.pub" and
74    "string.prv".
75
76  o All packet waiting timeout tests and error condition tests.
77
78
79 lib/silcsftp                    ****DONE****
80 ============
81
82  o Porting to use the new util library. (***DONE)
83
84
85 lib/silccore/silcpacket.[ch]    ****PARTLY DONE****
86 ============================
87
88  o Implement silc_packet_engine_stop and silc_packet_stream_destroy.
89
90  o Implement ACK packet and packet payload.
91
92  o SilcPacketEngine. (***DONE)
93
94  o New SILC Packet API. (***DONE)
95
96
97 lib/silccore/silcpacket.[ch]    ****PARTLY DONE****
98 ============================
99
100  o IV Included flag support, UDP transport support (***TESTING NEEDED)
101
102
103 lib/silccore/silcid.[ch]        ****DONE****
104 ========================
105
106  o Add silc_id_str2id to accept the destination buffer as argument
107    and thus not require any memory allocation.  Same will happen
108    with silc_id_payload_* functions. (***DONE)
109
110  o silc_id_str2id, silc_id2str to non-allocating routines. (***DONE)
111
112
113 lib/silccore
114 ============
115
116  o All payload encoding routines should take SilcStack as argument.
117
118  o All payload test routines into lib/silccore/tests/.
119
120
121 lib/silcskr
122 ===========
123
124  o Removing key from the repository is not possible currently.  It should
125    be.
126
127
128 lib/silcske/silcske.[ch]        ****DONE****
129 ========================
130
131  o IV Included flag support in SKE (***DONE)
132
133  o UDP transport changes; retransmission support by using exponential
134    backoff algorithm. (***DONE)
135
136  o SilcConnAuth header file documentation. (***DONE)
137
138
139 lib/silccrypt                   ****PARTLY DONE****
140 =============
141
142  o Implement SILC Public Key Version 2 handling in sign/verify.  Implement
143    Version (V) identifier (***DONE)
144
145  o Implement PKCS #1 sign/verify with hash OID. (***TESTING NEEDED)
146
147  o Implement the defined SilcDH API.  The definition is in
148    lib/silccrypt/silcdh.h.
149
150  o SSH2 public keys support, allowing the use of SSH2 public keys in
151    SILC.
152
153  o OpenPGP certificate support, allowing the use of PGP public keys
154    in SILC.
155
156  o SILC PKCS (silcpkcs.h) reorganizing when other PK supports added.
157    Move the SILC Public Key routines away from the crypto library into
158    the core library (silccore).  silc_pkcs_public/private_key_* routines
159    to silc_public/private_key_* routines.  The silc_public_key_* routines
160    should also automatically handle SILC Public Keys, and other keys
161    and certificates as well.  Add fe. silcpk.h into silccore.  It should
162    also include the Public Key Payload encoding and decoding routines.
163    (***DONE)
164
165  o Add DSS support.
166
167  o Assembler AES (***DONE)
168
169  o ECDSA and ECDH.
170
171
172 lib/silcutil                    ****PARTLY DONE****
173 ============
174
175  o The regex code from lib/contrib might compile fine on all platforms.
176    No need to make it silcutil/unix/ specific.  Add them to generic
177    silcutil.c.
178
179  o Fix universal time decoding (doesn't accept all forms) in silctime.c.
180
181  o silc_stringprep to non-allocating version.
182
183  o Compression routines are missing.  The protocol supports packet
184    compression thus it must be implemented.  SILC Zip API must be
185    defined.
186
187  o Add builtin SOCKS and HTTP Proxy support, well the SOCKS at least.
188    SILC currently supports SOCKS4 and SOCKS5 but it needs to be compiled
189    in separately.
190
191  o bool -> SilcBool (***DONE)
192
193  o Silc FD Stream to WIN32 (lib/silcutil/silcfdstream.h)
194
195 lib/silcutil/silcbuffer.h       ****DONE****
196 =========================
197
198  o Remove the `truelen' field from SilcBuffer as it is entirely
199    redundant since we can get the true length of the buffer by
200    doing buffer->end - buffer->header.  Add silc_buffer_truelen
201    macro instead.  Consider also removing `len' field too since
202    it effectively is buffer->tail - buffer->data, and adding
203    silc_buffer_len macro can do the same.  These would save
204    totally 8 bytes of memory per buffer. (***DONE)
205
206
207 lib/silcutil/silcbuffmt.[ch]    ****DONE****
208 ============================
209
210  o SilcStack aware silc_buffer_unformat (***DONE)
211
212  o SilcStack aware silc_buffer_format (***DONE)
213
214  o silc_buffer_format reallocates automatically (***DONE)
215
216  o SILC_STR_OFFSET (***DONE)
217
218
219 lib/silcutil/silcstack.[ch]     ****DONE****
220 ===========================
221
222  o Data stack implementation (***DONE)
223
224
225 lib/silcutil/silcstream.[ch]    ****DONE****
226 ============================
227
228  o Add abstract SilcStream. (***DONE)
229
230
231 lib/silcutil/silcsocketstream.[ch]      ****PARTY DONE****
232 ==================================
233
234  o Add SilcSocketStream (***DONE)
235
236  o Add SilcSocketStream for WIN32
237
238  o Handle EOS sending to upper layer properly
239
240  o Test QoS after the changes made to socket stream
241
242
243 lib/silcutil/silcschedule*.[ch]         ****PARTLY DONE****
244 ===============================
245
246  o Scheduler can be optimized for FD tasks by changing the fd_queue
247    to SilcHashTable instead of using linked list.  We need to do
248    one-to-one mapping of FD to task and hash table is more efficient
249    for this usage.
250
251    Also redefine the silc_select to perhaps return a separate
252    structure of the events that actually occurred, instead of
253    returning the events in the fd_list which is then traversed
254    in the generic code to find the changed events.  This can be
255    made faster by having own struct which includes only the
256    changed events, thus the tarversing is faster since the whole
257    fd_list is not traversed anymore (it is still traversed in the
258    silc_select but at least it removes one extra tarversing later
259    for the same list).
260
261    Other task queues should be changed to use SilcList.  (***DONE)
262
263  o Add SILC scheduler's internal routines into a table of implementation
264    function pointers, that the generic code then takes as extern from
265    implementation.  These are the silc_schedule_internal_* routines.
266    (***DONE)
267
268  o Change SILC_TASK_CALLBACK to non-static, and remove the macro
269    SILC_TASK_CALLBACK_GLOBAL. (***DONE)
270
271  o SILC Schedule API changes to WIN32.
272
273
274 lib/silcutil/silcasync.[ch]     ****DONE****
275 ===========================
276
277  o Add SilcAsyncOperation to utility library.  Any function that takes
278    callback as an argument must/should return SilcAsyncOperation.
279    (***DONE)
280
281
282 lib/silcutil/silctime.[ch]      ****DONE****
283 ===========================
284
285  o SilcTime. (***DONE)
286
287  o system time, universal, generalized. (***DONE)
288
289
290 lib/silcutil/silcfsm.[ch]       ****DONE****
291 =========================
292
293  o SILC Finite State Machine API.  Replaces SILC Protocol API (***DONE)
294
295
296 lib/silcutil/silcnet*, lib/silcutil/*/silc*net*         ****PARTLY DONE****
297 ===============================================
298
299  o Add UDP interface (***DONE)
300
301  o Add UDP interface for WIN32
302
303  o New network interfaces (***DONE)
304
305
306 lib/silcmath
307 ============
308
309  o Import TFM.  Talk to Tom to add the missing functions.  Use TFM in
310    client and client library, but TMA in server, due to the significantly
311    increased memory consumption with TFM, and the rare need for public
312    key operations in server.
313
314  o Change LTM and TFM function names when importing to SILC tree to avoid
315    rare linking problems on system that has same named symbols already in
316    the system.
317
318  o The SILC MP API function must start returning indication of success
319    and failure of the operation.
320
321  o Do SilcStack support for silc_mp_init, silc_mp_init_size and other
322    any other MP function (including utility ones) that may allocate
323    memory.
324
325  o Test on x86_64.
326
327  o All utility functions should be made non-allocating ones.
328
329
330 lib/silcutil/symbian/           ****PARTLY DONE****
331 =====================
332
333   o lib/silcutil/symbian routines missing or not completed.
334     (****TESTING NEEDED)
335
336   o Something needs to be thought to the logging globals as well,
337     like silc_debug etc.  They won't work on EPOC.  Perhaps logging
338     and debugging is to be disabled on EPOC.
339
340
341 lib/silcasn1                    ****PARTLY DONE****
342 ============
343
344  o ASN.1 library (***DONE)
345
346  o Header documentation missing. (***DONE)
347
348  o Some string encodings missing (copy/paste matter). (***DONE)
349
350  o Negative integer encoding
351
352
353 lib/silcpkix
354 ============
355
356  o PKIX implementation
357
358
359 lib/silcserver
360 ==============
361
362  o (Re)write commands/command replys.
363
364  o (Re)write notify handling.
365
366  o The SERVER_SIGNOFF notify handing is not optimal, because it'll
367    cause sending of multiple SIGNOFF notify's instead of the one
368    SERVER_SIGNOFF notify that the server received.  This should be
369    optimized so that the only SERVER_SIGNOFF is sent and not
370    SIGNOFF of notify at all (using SIGNOFF takes the idea about
371    SERVER_SIGNOFF away entirely).
372
373  o Another SERVER_SIGNOFF opt/bugfix:  Currently the signoff is
374    sent to a client if it is on same channel as the client that
375    signoffed.  However, the entire SERVER_SIGNOFF list is sent to
376    the client, ie. it may receive clients that was not on the
377    same channel.  This is actually against the specs.  It must be
378    done per channel.  It shouldn't receive the whole list just
379    because one client happened to be on same channel.
380
381  o MAYBE: The SilcChannelClientEntry can be:
382         SilcUInt32 address;
383         SilcUInt32 mode;
384
385   where address is SilcClientEntry address XOR SilcChannelEntry.
386   You can get SilcClientEntry by doing client = chl->address XOR channel,
387   and SilcChannelEntry by doing channel = chl->address XOR client.
388   As long as the other pointer is always available when accessing the
389   structure this can be done.
390
391  o Add reference counters to all Silc*Entry structures
392
393  o SERVICEs support (plugin, SIM)
394
395  o If client's public key is saved in the server (and doing public key
396    authentication) then the hostname and the username information could
397    be taken from the public key.  Should be a configuration option!
398
399  o Add a timeout to handling incoming JOIN commands.  It should be
400    enforced that JOIN command is executed only once in a second or two
401    seconds.  Now it is possible to accept n incoming JOIN commands
402    and process them without any timeouts.  THis must be employed because
403    each JOIN command will create and distribute the new channel key
404    to everybody on the channel (Fix this to 0.9.x).
405
406  o Related to above.  If multiple JOINs are received in sequence perhaps
407    new key should be created only once, if the JOINs are handeled at the same
408    time.  Now we create multiple keys and never end up using them because
409    many JOINs are processed at the same time in sequence.  Only the last
410    key ends up being used.
411
412  o The CMODE cipher & hmac change problem (#101).