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