updates
[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.
5
6
7 lib/silccore/silcpacket.[ch]    ****DONE****
8 ============================
9
10  o SilcPacketEngine. (***DONE)
11
12  o New SILC Packet API. (***DONE)
13
14
15 lib/silccore/silcpacket.[ch]    ****PARTLY DONE****
16 ============================
17
18  o IV Included flag support, UDP transport support (***TESTING NEEDED)
19
20
21 lib/silccore/silcid.[ch]        ****DONE****
22 ========================
23
24  o Add silc_id_str2id to accept the destination buffer as argument
25    and thus not require any memory allocation.  Same will happen
26    with silc_id_payload_* functions. (***DONE)
27
28  o silc_id_str2id, silc_id2str to non-allocating routines. (***DONE)
29
30
31 lib/silccore
32 ============
33
34  o All payload encoding routines should take SilcStack as argument.
35
36
37 lib/silcskr
38 ===========
39
40  o Removing key from the repository is not possible currently.  It should 
41    be.
42
43
44 lib/silcske/silcske.[ch]
45 ========================
46
47  o IV Included flag support in SKE (it currently doesn't accept it)
48
49  o assemble_security_properties to take cipher, hash, hmac, etc. as
50    argument.
51
52  o SilcConnAuth header file documentation.
53
54
55 lib/silccrypt                   ****PARTLY DONE****
56 =============
57
58  o Implement the defined SilcDH API.  The definition is in
59    lib/silccrypt/silcdh.h.
60
61  o SSH2 public keys support, allowing the use of SSH2 public keys in
62    SILC.
63
64  o OpenPGP certificate support, allowing the use of PGP public keys
65    in SILC.
66
67  o SILC PKCS (silcpkcs.h) reorganizing when other PK supports added.
68    Move the SILC Public Key routines away from the crypto library into
69    the core library (silccore).  silc_pkcs_public/private_key_* routines
70    to silc_public/private_key_* routines.  The silc_public_key_* routines
71    should also automatically handle SILC Public Keys, and other keys
72    and certificates as well.  Add fe. silcpk.h into silccore.  It should
73    also include the Public Key Payload encoding and decoding routines.
74    (***DONE)
75
76  o Add DSS support.
77
78  o Cipher optimizations (asm, that this) at least for i386 would be nice.
79
80  o ECDSA and ECDH.
81
82
83 lib/silcutil                    ****PARTLY DONE****
84 ============
85
86  o silc_stringprep to non-allocating version.
87
88  o Compression routines are missing.  The protocol supports packet
89    compression thus it must be implemented.  SILC Zip API must be
90    defined.
91
92  o Add builtin SOCKS and HTTP Proxy support, well the SOCKS at least.
93    SILC currently supports SOCKS4 and SOCKS5 but it needs to be compiled
94    in separately.
95
96  o bool -> SilcBool (***DONE)
97
98  o Silc FD Stream to WIN32 (lib/silcutil/silcfdstream.h)
99
100
101 lib/silcutil/silcbuffer.h       ****DONE****
102 =========================
103
104  o Remove the `truelen' field from SilcBuffer as it is entirely
105    redundant since we can get the true length of the buffer by
106    doing buffer->end - buffer->header.  Add silc_buffer_truelen
107    macro instead.  Consider also removing `len' field too since
108    it effectively is buffer->tail - buffer->data, and adding
109    silc_buffer_len macro can do the same.  These would save
110    totally 8 bytes of memory per buffer. (***DONE)
111
112
113 lib/silcutil/silcbuffmt.[ch]    ****PARTLY DONE****
114 ============================
115
116  o SilcStack aware silc_buffer_unformat
117
118  o SilcStack aware silc_buffer_format (***DONE)
119
120  o silc_buffer_format reallocates automatically (***DONE)
121
122  o SILC_STR_OFFSET (***DONE)
123
124
125 lib/silcutil/silcstack.[ch]     ****DONE****
126 ===========================
127
128  o Data stack implementation (***DONE)
129
130
131 lib/silcutil/silcstream.[ch]    ****DONE****
132 ============================
133
134  o Add abstract SilcStream. (***DONE)
135
136
137 lib/silcutil/silcsocketstream.[ch]      ****PARTY DONE****
138 ==================================
139
140  o Add SilcSocketStream (***DONE)
141
142  o Add SilcSocketStream for WIN32
143
144  o Handle EOS sending to upper layer properly
145
146  o Test QoS after the changes made to socket stream
147
148
149 lib/silcutil/silcschedule*.[ch]         ****DONE****
150 ===============================
151
152  o Scheduler can be optimized for FD tasks by changing the fd_queue
153    to SilcHashTable instead of using linked list.  We need to do
154    one-to-one mapping of FD to task and hash table is more efficient
155    for this usage.
156
157    Also redefine the silc_select to perhaps return a separate
158    structure of the events that actually occurred, instead of
159    returning the events in the fd_list which is then traversed
160    in the generic code to find the changed events.  This can be
161    made faster by having own struct which includes only the
162    changed events, thus the tarversing is faster since the whole
163    fd_list is not traversed anymore (it is still traversed in the
164    silc_select but at least it removes one extra tarversing later
165    for the same list).
166
167    Other task queues should be changed to use SilcList.  (***DONE)
168
169  o Add SILC scheduler's internal routines into a table of implementation
170    function pointers, that the generic code then takes as extern from
171    implementation.  These are the silc_schedule_internal_* routines.
172    (***DONE)
173
174  o Change SILC_TASK_CALLBACK to non-static, and remove the macro
175    SILC_TASK_CALLBACK_GLOBAL. (***DONE)
176
177  o SILC Schedule API changes to WIN32.
178
179
180 lib/silcutil/silcasync.[ch]     ****DONE****
181 ===========================
182
183  o Add SilcAsyncOperation to utility library.  Any function that takes
184    callback as an argument must/should return SilcAsyncOperation.
185    (***DONE)
186
187
188 lib/silcutil/silctime.[ch]      ****DONE****
189 ===========================
190
191  o SilcTime. (***DONE)
192
193  o system time, universal, generalized. (***DONE)
194
195
196 lib/silcutil/silcfsm.[ch]       ****DONE****
197 =========================
198
199  o SILC Finite State Machine API.  Replaces SILC Protocol API (***DONE)
200
201
202 lib/silcutil/silcnet*, lib/silcutil/*/silc*net*         ****PARTLY DONE****
203 ===============================================
204
205  o Add UDP interface (***DONE)
206
207  o Add UDP interface for WIN32
208
209  o New network interfaces (***DONE)
210
211
212 lib/silcsftp
213 ============
214
215  o Porting to use the new util library.
216
217
218 lib/silcutil/epoc/*
219 ===================
220
221   o lib/silcutil/epoc routines missing or not completed.
222
223   o The PKCS#1 also calls global RNG (even though it is not used
224     currently in SILC, the interface allows its use).
225
226   o Something needs to be thought to the logging globals as well,
227     like silc_debug etc.  They won't work on EPOC.  Perhaps logging
228     and debugging is to be disabled on EPOC.
229
230
231 lib/silcmath
232 ============
233
234  o Import TFM.  Talk to Tom to add the missing functions.  Use TFM in
235    client and client library, but TMA in server, due to the significantly
236    increased memory consumption with TFM, and the rare need for public
237    key operations in server.
238
239  o Change LTM and TFM function names when importing to SILC tree to avoid
240    rare linking problems on system that has same named symbols already in
241    the system.
242
243  o The SILC MP API function must start returning indication of success
244    and failure of the operation.
245
246  o Do SilcStack support for silc_mp_init, silc_mp_init_size and other
247    any other MP function (including utility ones) that may allocate
248    memory.
249
250  o Test on x86_64.
251
252  o All utility functions should be made non-allocating ones.
253
254
255 lib/silcasn1                    ****PARTLY DONE****
256 ============
257
258  o ASN.1 library (***DONE)
259
260  o Header documentation missing. (***DONE)
261
262  o Some string encodings missing (copy/paste matter). (***DONE)
263
264  o Negative integer encoding
265
266
267 lib/silcpkix
268 ============
269
270  o PKIX implementation
271
272
273 lib/silcserver
274 ==============
275
276  o (Re)write commands/command replys.
277
278  o (Re)write notify handling.
279
280  o The SERVER_SIGNOFF notify handing is not optimal, because it'll
281    cause sending of multiple SIGNOFF notify's instead of the one
282    SERVER_SIGNOFF notify that the server received.  This should be
283    optimized so that the only SERVER_SIGNOFF is sent and not
284    SIGNOFF of notify at all (using SIGNOFF takes the idea about
285    SERVER_SIGNOFF away entirely).
286
287  o Another SERVER_SIGNOFF opt/bugfix:  Currently the signoff is
288    sent to a client if it is on same channel as the client that
289    signoffed.  However, the entire SERVER_SIGNOFF list is sent to
290    the client, ie. it may receive clients that was not on the
291    same channel.  This is actually against the specs.  It must be
292    done per channel.  It shouldn't receive the whole list just
293    because one client happened to be on same channel.
294
295  o MAYBE: The SilcChannelClientEntry can be:
296         SilcUInt32 address;
297         SilcUInt32 mode;
298
299   where address is SilcClientEntry address XOR SilcChannelEntry.
300   You can get SilcClientEntry by doing client = chl->address XOR channel,
301   and SilcChannelEntry by doing channel = chl->address XOR client.
302   As long as the other pointer is always available when accessing the
303   structure this can be done.
304
305  o Add reference counters to all Silc*Entry structures
306
307  o SERVICEs support (plugin, SIM)
308
309  o If client's public key is saved in the server (and doing public key
310    authentication) then the hostname and the username information could
311    be taken from the public key.  Should be a configuration option!
312
313  o Add a timeout to handling incoming JOIN commands.  It should be
314    enforced that JOIN command is executed only once in a second or two
315    seconds.  Now it is possible to accept n incoming JOIN commands
316    and process them without any timeouts.  THis must be employed because
317    each JOIN command will create and distribute the new channel key
318    to everybody on the channel (Fix this to 0.9.x).
319
320  o Related to above.  If multiple JOINs are received in sequence perhaps
321    new key should be created only once, if the JOINs are handeled at the same
322    time.  Now we create multiple keys and never end up using them because
323    many JOINs are processed at the same time in sequence.  Only the last
324    key ends up being used.
325
326  o The CMODE cipher & hmac change problem (#101).
327
328
329 lib/silcclient
330 ==============
331
332  o Some form of rewrite to make it more efficient.
333
334  o Clear up interfaces.
335
336  o Remove silc_client_run and silc_client_run_one from calling SilcSchedule.
337    Leave the scheduling entirely to application.