Added silc_net_tcp_create_listener2
[crypto.git] / TODO
diff --git a/TODO b/TODO
index 15ddae4f963ce24ac419180a0420db6d277a47a3..07b7b956455d43ce7eed64bffc4e8196a7607b43 100644 (file)
--- a/TODO
+++ b/TODO
@@ -54,6 +54,8 @@ lib/silccore
 lib/silcclient, The Client Library
 ==================================
 
 lib/silcclient, The Client Library
 ==================================
 
+ o UDP SILC connection support to SILC server
+
  o Giving WHOIS for nick that doesn't exist should remove any same
    named entries from the client cache.
 
  o Giving WHOIS for nick that doesn't exist should remove any same
    named entries from the client cache.
 
@@ -66,6 +68,15 @@ lib/silcclient, The Client Library
    never joined the channel if this happens.  What to do if message is
    received from user that hasn't been resolved/joined?
 
    never joined the channel if this happens.  What to do if message is
    received from user that hasn't been resolved/joined?
 
+ o Add the SilcStream (socket stream) from the SilcPacketStream and
+   SilcSocket from the socket stream to SilcClientConnection for easier
+   access to them for programmers.  Currently these have to be digged up
+   from the packet stream.
+
+ o Connection option that attemps to connect to remot host with various 
+   different mechanisms: UDP 706, TCP 706, TCP 80, TCP 443, UDP 7706 and
+   TCP 7706.  This is the so called hole punching mechanism.
+
  o Message ACKing support.
 
  o in /cmode and /cumode with +r, maybe the public key and private key
  o Message ACKing support.
 
  o in /cmode and /cumode with +r, maybe the public key and private key
@@ -92,6 +103,14 @@ Runtime library, lib/silcutil/
 
  o silc_getopt routines
 
 
  o silc_getopt routines
 
+ o Add silc_stream_get_root and add get_root stream operation.  It 
+   returns the root of the stream or NULL if stream doesn't have root.
+
+ o Change some stream routines (like socket stream API) to accept ANY
+   stream and use silc_stream_get_root to get the socket stream from the
+   given stream.  This will make various stream APIs more easier to use
+   when user doesn't have to dig up the correct stream.
+
  o The SILC Event signals.  Asynchronous events that can be created,
    connected to and signalled.  Either own event routines or glued into
    SilcSchedule:
  o The SILC Event signals.  Asynchronous events that can be created,
    connected to and signalled.  Either own event routines or glued into
    SilcSchedule:
@@ -161,9 +180,9 @@ Runtime library, lib/silcutil/
  o Structured log messages to Log API.  Allows machine readable log
    messages.  Would allow sending of any kind of data in a log message.
 
  o Structured log messages to Log API.  Allows machine readable log
    messages.  Would allow sending of any kind of data in a log message.
 
- o Base64 to an own API
+ o Base64 to an own API (***DONE)
 
 
- o Timer API
+ o Timer API (***DONE)
 
  o Add builtin SOCKS and HTTP Proxy support, well the SOCKS at least.
    SILC currently supports SOCKS4 and SOCKS5 but it needs to be compiled
 
  o Add builtin SOCKS and HTTP Proxy support, well the SOCKS at least.
    SILC currently supports SOCKS4 and SOCKS5 but it needs to be compiled
@@ -196,6 +215,11 @@ Runtime library, lib/silcutil/
    _ua unaligned memory allocation routines.  Remove unaligned memory
    allocation possibility. (***DONE)
 
    _ua unaligned memory allocation routines.  Remove unaligned memory
    allocation possibility. (***DONE)
 
+ o silc_stack_alloc shouldn't require multiple by 8 size argument, it 
+   should figure it out itself.
+
+ o silc_malloc et. al. to respect --with-alignment.
+
  o Add '%@' format to silc_snprintf functions.  It marks for external
    rendering function of following type:
 
  o Add '%@' format to silc_snprintf functions.  It marks for external
    rendering function of following type:
 
@@ -216,6 +240,12 @@ Runtime library, lib/silcutil/
 
    silc_snprintf(buf, sizeof(buf), "Client ID %@", id_renderer, client_id);
 
 
    silc_snprintf(buf, sizeof(buf), "Client ID %@", id_renderer, client_id);
 
+ o Change silc_gettimeofday on Unix to use clock_gettime with REALTIME
+   clock if it is available, otherwise use gettimeofday(). (***DONE)
+
+ (o SilcIpAddr abstraction.  Ipv4 and Ipv6 support to the abstaction.) 
+  maybe
+
  (o Generic SilcStatus or SilcResult that includes all possible status and
     error conditions, including those of SILC protocol.  Though, the SILC
     protocol related status (currently in silcstatus.h) cannot be in
  (o Generic SilcStatus or SilcResult that includes all possible status and
     error conditions, including those of SILC protocol.  Though, the SILC
     protocol related status (currently in silcstatus.h) cannot be in
@@ -316,17 +346,23 @@ Crypto Library, lib/silccrypt/
    check the alg->hash, supported hash functions.  Maybe deliver it also
    to all other functions in SilcPKCSAlgorithm to be consistent. (***DONE)
 
    check the alg->hash, supported hash functions.  Maybe deliver it also
    to all other functions in SilcPKCSAlgorithm to be consistent. (***DONE)
 
- o Add DSS support.  Take implementation from Tom or make it yourself.
+ o Add DSA support to SILC public key.
+
+ o Add DSS support. (***DONE)
 
  o Implement the defined SilcDH API.  The definition is in
    lib/silccrypt/silcdh.h.  Make sure it is asynchronous so that it can
    be accelerated.  Also take into account that it could use elliptic
    curves.
 
 
  o Implement the defined SilcDH API.  The definition is in
    lib/silccrypt/silcdh.h.  Make sure it is asynchronous so that it can
    be accelerated.  Also take into account that it could use elliptic
    curves.
 
- o ECDSA and ECDH
+ o Add ECDSA support.
+
+ o Add ECDH support.
+
+ o AES CBC is missing proper alignment code (see silc_1_1_branch).
 
  o All cipher, hash, hmac etc. allocation routines should take their name
 
  o All cipher, hash, hmac etc. allocation routines should take their name
-   in as const char * not const unsigned char *.
+   in as const char * not const unsigned char *. (***DONE)
 
 
 SILC Accelerator Library
 
 
 SILC Accelerator Library
@@ -337,8 +373,6 @@ SILC Accelerator Library
    and SilcPrivateKey can be used but they call the accelerators.
    (***DONE)
 
    and SilcPrivateKey can be used but they call the accelerators.
    (***DONE)
 
- o Add complete wrapper for PKCS API in silcacc_pkcs.c.
-
  o Implement software accelerator.  It is a thread pool system where the
    public key and private key operations are executed in threads. 
    (***DONE)
  o Implement software accelerator.  It is a thread pool system where the
    public key and private key operations are executed in threads. 
    (***DONE)
@@ -353,13 +387,22 @@ SILC Accelerator Library
 lib/silcmath
 ============
 
 lib/silcmath
 ============
 
- o Import TFM.  Talk to Tom to add the missing functions.  Use TFM in
-   client and client library, but TMA in server, due to the significantly
-   increased memory consumption with TFM, and the rare need for public
-   key operations in server.
+ o Import TFM.  We want TFM's speed but its memory requirements are
+   just too much.  By default it uses large pre-allocated tables which 
+   will eat memory when there are thousands of public keys in system.
+   We probably want to change TFM's fp_int dynamic so that a specific
+   size can be allocated for the int.  We could have two new functions:
+
+   SilcBool silc_mp_init_size(SilcMPInt *mp, SilcUInt32 bit_size);
+   SilcBool silc_mp_sinit_size(SilcStack stack, SilcMPInt *mp,
+                              SilcUInt32 bit_size);
+
+   Which by default allocates `bit_size' bits instead of some default
+   value.  silc_mp_init would allocate the default FP_SIZE with TFM
+   and do normal init with TMA and GMP.  _init_size with TMA and GMP
+   would be same as _init.
 
 
-   We want TFM's speed but not TFM's memory requirements.  Talk to Tom
-   about making the TFM mp dynamic just as it is in LTM.
+ o Add AND, OR and XOR support to TFM or ask Tom to do it.
 
  o The SILC MP API function must start returning indication of success
    and failure of the operation.
 
  o The SILC MP API function must start returning indication of success
    and failure of the operation.
@@ -407,15 +450,14 @@ lib/silcasn1
 lib/silcpgp
 ===========
 
 lib/silcpgp
 ===========
 
- o OpenPGP certificate support, allowing the use of PGP public keys
-   in SILC.
+ o OpenPGP certificate support, allowing the use of PGP public keys.
 
 
 lib/silcssh
 ===========
 
 
 
 lib/silcssh
 ===========
 
- o SSH2 public key/private key support, allowing the use of SSH2 keys
-   in SILC.  RFC 4716.
+ o SSH2 public key/private key support, allowing the use of SSH2 keys.
+   RFC 4716.  (***DONE)
 
 
 lib/silcpkix
 
 
 lib/silcpkix
@@ -473,6 +515,9 @@ lib/silcserver
 
  o Library must have support for SERVICE command.
 
 
  o Library must have support for SERVICE command.
 
+ o Both UDP and TCP support for incoming connecetions.  Maintaining long
+   term UDP sessions.
+
  o The server must be able to run behind NAT device.  This means that
    Server ID must be based on public IP instead of private IP.
 
  o The server must be able to run behind NAT device.  This means that
    Server ID must be based on public IP instead of private IP.
 
@@ -486,10 +531,24 @@ lib/silcserver
  o Do inccoming packet processing in an own FSM thread in the
    server-threads FSM.  Same as in client library.
 
  o Do inccoming packet processing in an own FSM thread in the
    server-threads FSM.  Same as in client library.
 
+ o Binding to other ports than 706 too.  To allow easier traversing
+   through NATs and firewalls server should bind to 80, 443 and 7706
+   by default (at least try to bind).  Connections must work normally
+   even if they were established to some other port other than 706.
+
+   Connection option that attemps to connect to remot server with various 
+   different mechanisms: UDP 706, TCP 706, TCP 80, TCP 443, UDP 7706 and
+   TCP 7706.  This is the so called hole punching mechanism.
+
  o Reference count all Silc*Entry structures.
 
  Some issues that must be kept in mind from 1.0 and 1.1 silcd's:
 
  o Reference count all Silc*Entry structures.
 
  Some issues that must be kept in mind from 1.0 and 1.1 silcd's:
 
+ o The server and router software MUST work out of the box.  After 
+   installation the server must not require any configuration to run the
+   most basic working configuration.  No defining IP addresses, etc.
+   The server must work just by running it.
+
  o The SERVER_SIGNOFF notify handing is not optimal, because it'll
    cause sending of multiple SIGNOFF notify's instead of the one
    SERVER_SIGNOFF notify that the server received.  This should be
  o The SERVER_SIGNOFF notify handing is not optimal, because it'll
    cause sending of multiple SIGNOFF notify's instead of the one
    SERVER_SIGNOFF notify that the server received.  This should be