Finished the X9.31 RNG implementations.
[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 ** gcry_ac
7   Consider to remove it.
8
9 * udiv-qrnbd.o should get build as *.lo [HPUX]
10
11 * Allow operation using RSA keys consisting of the OpenSSL keys.
12   This requires the introduction of a parameter names (say) U which
13   is calculated according to OpenSSL/PKCS#1 rules.
14
15 * Add a warning to the manual, to check that libgcrypt actually has
16   been compiled with thread support when used by a threaded
17   application.
18
19 * linker script test
20   Write an autoconf test to check whether the linker supports a
21   version script. 
22
23 * Add attributes to the MPI functions.
24
25 * cipher/pubkey.c and pubkey implementaions.
26   Don't rely on the secure memory based wiping function but add an
27   extra wiping.
28   
29 * update/improve documentation
30 ** it's outdated for e.g. gcry_pk_algo_info.
31 ** document algorithm capabilities
32 ** Init requirements for random
33    The documentation says in "Controlling the library" that some
34    functions can only be used at initialization time, but it does not
35    explain what that means.  Initialization is a multi-step procedure:
36    First the thread callbacks have to be set up (optional), then the
37    gcry_check_version() function must be called (mandatory), then
38    further functions can be used.
39
40    The manual also says that something happens when the seed file is
41    registered berfore the PRNG is initialized, but it does not say how
42    one can guarantee to call it early enough.
43
44    Suggested fix: Specify initialization time as the time after
45    gcry_check_version and before calling any other function except
46    gcry_control().
47
48    All functions which modify global state without a lock must be
49    documented as "can only be called during initialization time" (but
50    see item 1).  Then the extraneous calls to _gcry_random_initialize
51    in gcry_control() can be removed, and the comments "not thread
52    safe" in various initialization-time-only functions like
53    _gcry_use_random_daemon become superfluous.
54
55 * Use builtin bit functions of gcc 3.4
56
57 * Consider using a daemon to maintain the random pool
58   [Partly done] The down side of this is that we can't assume that the
59   random has has always been stored in "secure memory".  And we rely
60   on that sniffing of Unix domain sockets is not possible.  We can
61   implement this simply by detecting a special prefixed random seed
62   name and divert in this case to the daemon.  There are several
63   benefits with such an approach: We keep the state of the RNG over
64   invocations of libgcrypt based applications, don't need time
65   consuming initialization of the pool and in case the entropy
66   collectros need to run that bunch of Unix utilities we don't waste
67   their precious results.
68
69 * Add transient flag to RSA key generation
70  For short living keys it makes sense to allow generation using a PRNG.
71  We could implement it this way:
72
73  (genkey
74    (rsa
75      (nbits 4:1024)
76      (transient-key)))
77
78
79 * Out of memory handler for secure memory should do proper logging
80
81   There is no shortage of standard memory, so logging is most likely
82   possible.
83
84 * mpi_print does not use secure memory
85   for internal variables.
86
87 * Add OAEP
88
89 * gcryptrnd.c
90   Requires a test for pth [done] as well as some other tests.
91
92 * secmem.c
93   Check whether the memory block is valid before releasing it and
94   print a diagnosic, like glibc does.
95
96 * threads
97 ** We need to document fork problems
98   In particular that reinitialization is required in random.c
99   However, there is no code yet to do it.
100
101 * Tests
102   We need a lot more tests.  Lets keep an ever growing list here.
103 ** Write tests for the progress function
104 ** mpitests does no real checks yet.
105 ** pthreads
106   To catch simple errors like the one fixed on 2007-03-16.
107 ** C++ tests
108   We have some code to allow using libgcrypt from C++, so we also
109   should have a test case.
110
111 * The prime generator always uses very-strong-random.