+lib/silccrypt ****DONE****
+=============
+
+ o Implement PKCS #1 sign/verify with hash OID. (***TESTING NEEDED)
+
+ o Implement SILC Public Key Version 2 handling in sign/verify. Implement
+ Version (V) identifier (***DONE)
+
+ o SILC PKCS (silcpkcs.h) reorganizing when other PK supports added.
+ Move the SILC Public Key routines away from the crypto library into
+ the core library (silccore). silc_pkcs_public/private_key_* routines
+ to silc_public/private_key_* routines. The silc_public_key_* routines
+ should also automatically handle SILC Public Keys, and other keys
+ and certificates as well. Add fe. silcpk.h into silccore. It should
+ also include the Public Key Payload encoding and decoding routines.
+ (***DONE)
+
+ o Assembler AES (***DONE)
+
+
+lib/silcutil ****DONE****
+============
+
+ o The regex code from lib/contrib might compile fine on all platforms.
+ No need to make it silcutil/unix/ specific. Add them to generic
+ silcutil.c. (***DONE)
+
+ o Silc FD Stream to WIN32 (lib/silcutil/silcfdstream.h) (***TESTING NEEDED)
+
+ o bool -> SilcBool (***DONE)
+
+
+lib/silcutil/silcbuffer.h ****DONE****
+=========================
+
+ o Remove the `truelen' field from SilcBuffer as it is entirely
+ redundant since we can get the true length of the buffer by
+ doing buffer->end - buffer->header. Add silc_buffer_truelen
+ macro instead. Consider also removing `len' field too since
+ it effectively is buffer->tail - buffer->data, and adding
+ silc_buffer_len macro can do the same. These would save
+ totally 8 bytes of memory per buffer. (***DONE)
+
+
+lib/silcutil/silcbuffmt.[ch] ****DONE****
+============================
+
+ o SilcStack aware silc_buffer_unformat (***DONE)
+
+ o SilcStack aware silc_buffer_format (***DONE)
+
+ o silc_buffer_format reallocates automatically (***DONE)
+
+ o SILC_STR_OFFSET (***DONE)
+
+
+lib/silcutil/silcstack.[ch] ****DONE****
+===========================
+
+ o Data stack implementation (***DONE)
+
+
+lib/silcutil/silcstream.[ch] ****DONE****
+============================
+
+ o Add abstract SilcStream. (***DONE)
+
+
+lib/silcutil/silcsocketstream.[ch] ****DONE****
+==================================
+
+ o Add SilcSocketStream (***DONE)
+
+ o Add SilcSocketStream for WIN32 (***TESTING NEEDED)
+
+ o Test QoS after the changes made to socket stream
+
+
+lib/silcutil/silcschedule*.[ch] ****DONE****
+===============================
+
+ o Scheduler can be optimized for FD tasks by changing the fd_queue
+ to SilcHashTable instead of using linked list. We need to do
+ one-to-one mapping of FD to task and hash table is more efficient
+ for this usage.
+
+ Also redefine the silc_select to perhaps return a separate
+ structure of the events that actually occurred, instead of
+ returning the events in the fd_list which is then traversed
+ in the generic code to find the changed events. This can be
+ made faster by having own struct which includes only the
+ changed events, thus the tarversing is faster since the whole
+ fd_list is not traversed anymore (it is still traversed in the
+ silc_select but at least it removes one extra tarversing later
+ for the same list).
+
+ Other task queues should be changed to use SilcList. (***DONE)
+
+ o Add SILC scheduler's internal routines into a table of implementation
+ function pointers, that the generic code then takes as extern from
+ implementation. These are the silc_schedule_internal_* routines.
+ (***DONE)
+
+ o Change SILC_TASK_CALLBACK to non-static, and remove the macro
+ SILC_TASK_CALLBACK_GLOBAL. (***DONE)
+
+ o SILC Schedule API changes to WIN32. (***DONE)
+
+
+lib/silcutil/silcasync.[ch] ****DONE****
+===========================
+
+ o Add SilcAsyncOperation to utility library. Any function that takes
+ callback as an argument must/should return SilcAsyncOperation.
+ (***DONE)
+
+
+lib/silcutil/silctime.[ch] ****DONE****