Use extra counter to check random pool filling.
[libgcrypt.git] / TODO
1 What's left to do                                 -*- outline -*-
2
3 * Next API break:
4 ** gcry_ac_io_t
5   Remove use of anonymous union.
6
7 * udiv-qrnbd.o should get build as *.lo [HPUX]
8
9 * Allow operation using RSA keys consisting of the OpenSSL list of
10   parameters and allow for a third form where the private Exponent
11   is not given (saves space).
12
13 * Add a warning to the manual, to check that libgcrypt actually has
14   been compiled with thread support when used by a threaded
15   application.
16
17 * linker script test
18   Write an autoconf test to check whether the linker supports a
19   version script. 
20
21 * Make use of the forthcoming visibility attribute.
22
23 * Add attributes to the MPI functions.
24
25 * In case the ac interface will be more popular than the pk interface,
26   the asymmetric ciphers could be changed for convenient interaction
27   with the ac interface (i.e. by using ac's `data sets') and the pk
28   interface could be changed to be a wrapper for the ac interface.
29   ==> It is unlikely that we will do that.  The AC interafce turned
30   out to be more complicated than the regular one.
31
32 * cipher/pubkey.c and pubkey implementaions.
33   Don't rely on the secure memory based wiping function but add an
34   extra wiping.
35   
36 * update/improve documentation
37 ** it's outdated for e.g. gcry_pk_algo_info.
38 ** document algorithm capabilities
39 ** Init requirements for random
40    The documentation says in "Controlling the library" that some
41    functions can only be used at initialization time, but it does not
42    explain what that means.  Initialization is a multi-step procedure:
43    First the thread callbacks have to be set up (optional), then the
44    gcry_check_version() function must be called (mandatory), then
45    further functions can be used.
46
47    The manual also says that something happens when the seed file is
48    registered berfore the PRNG is initialized, but it does not say how
49    one can guarantee to call it early enough.
50
51    Suggested fix: Specify initialization time as the time after
52    gcry_check_version and before calling any other function except
53    gcry_control().
54
55    All functions which modify global state without a lock must be
56    documented as "can only be called during initialization time" (but
57    see item 1).  Then the extraneous calls to _gcry_random_initialize
58    in gcry_control() can be removed, and the comments "not thread
59    safe" in various initialization-time-only functions like
60    _gcry_use_random_daemon become superfluous.
61
62 * Use builtin bit functions of gcc 3.4
63
64 * Consider using a daemon to maintain the random pool
65   [Partly done] The down side of this is that we can't assume that the
66   random has has always been stored in "secure memory".  And we rely
67   on that sniffing of Unix domain sockets is not possible.  We can
68   implement this simply by detecting a special prefixed random seed
69   name and divert in this case to the daemon.  There are several
70   benefits with such an approach: We keep the state of the RNG over
71   invocations of libgcrypt based applications, don't need time
72   consuming initialization of the pool and in case the entropy
73   collectros need to run that bunch of Unix utilities we don't waste
74   their precious results.
75
76 * Out of memory handler for secure memory should do proper logging
77
78   There is no shortage of standard memory, so logging is most likely
79   possible.
80
81 * mpi_print does not use secure memory
82   for internal variables.
83
84 * gcry_mpi_lshift is missing
85
86 * Add internal versions of mpi functions
87   Or make use of the visibility attribute.
88
89 * Add OAEP
90
91 * gcryptrnd.c
92   Requires a test for pth [done] as well as some other tests.
93
94 * secmem.c
95   Check whether the memory block is valid before releasing it and
96   print a diagnosic, like glibc does.
97
98 * threads
99 ** We need to document fork problems
100   In particular that reinitialization is required in random.c
101   However, there is no code yet to do it.
102
103 * Tests
104   We need a lot more tests.  Lets keep an ever growing list here.
105 ** Write tests for the progress function
106 ** mpitests does no real checks yet.
107 ** pthreads
108   To catch simple errors like the one fixed on 2007-03-16.
109 ** C++ tests
110   We have some code to allow using libgcrypt from C++, so we also
111   should have a test case.
112
113 * /dev/urandom and Solaris
114   Make the configure check similar to GnuPG.