Check for SRT in configure before using any SRT specific macros.
[crypto.git] / TODO
1 TODO for 1.2 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 NOTE: A TODO entry does not mean that it is ever going to be done.  Some
9 of the entries may be just ideas, good, bad or ugly.  If you want to work
10 on some of the TODO entries simply let us know about it by dropping a note
11 to silc-devel mailing list or appear on 'silc' channel on SILCNet.
12
13
14 Crypto Library, lib/silccrypt/
15 ==============================
16
17  o Add fingerprint to SilcSILCPublicKey and retrieval to silcpk.h, and
18    possibly to silcpkcs.h.
19
20    /* Return fingerprint of the `public_key'.  Returns also the algorithm
21       that has been used to make the fingerprint. */
22    const unsigned char *
23    silc_pkcs_get_fingerprint(SilcPublicKey public_key,
24                              const char **hash_algorithm,
25                              SilcUInt32 *fingerprint_len);
26
27  o Add CMAC and maybe others.  Change needs rewrite of the internals of
28    the SILC Mac API, currently it's suitable only for HMACs.
29
30  o Global RNG must be changed to use SILC Global API.
31
32  o Global cipher, hash, mac, and pkcs tables must use SILC Global API.
33
34  o Add FIPS compliant RNG.
35
36  o Implement the defined SilcDH API.  The definition is in
37    lib/silccrypt/silcdh.h.  Make sure it is asynchronous so that it can
38    be accelerated.  Also take into account that it could use elliptic
39    curves.
40
41  o Add Elgamal.
42
43  o Add ECDSA support.
44
45  o Add ECDH support.
46
47  o Add PKCS#1 RSAES-OAEP and RSASSA-PSS.
48
49  o Add GCM mode.
50
51  o Do GCC vs ICC benchmarks of all key algorithms.
52
53  o Add DSA support to SILC public key.
54
55  o The asynchronous functions to perhaps to _async to preserve backwards
56    compatibility with synchronous versions, and make easier to migrate
57    from 1.1 to 1.2. (***DONE)
58
59  o AES CBC is missing proper alignment code. (***DONE)
60
61  o silc_pkcs_public_key_alloc should accept also SILC_PKCS_ANY as argument
62    and try all supported PKCS until one succeeds. (***DONE)
63
64  o Associate a default hash function with all PKCS algorithms.  User can
65    override it in silc_pkcs_sign.  DSA with FIPS186-3 determines the
66    hash algorithm by the key length. (***DONE)
67
68  o Document all cipher names, hash names, mac names, pkcs names. (***DONE)
69
70  o SilcHmac must be replaced with generic SilcMac so that we can add
71    others than just HMAC algorithms.  Backwards support (via #define's)
72    must be preserved. (***DONE)
73
74  o Change the DSA implementation to support FIPS186-3.  This means that
75    the q length is determined by the key length.  (***DONE)
76
77  o Add silc_crypto_init and silc_crypto_uninit.  The _init should take
78    SilcStack that will act as global memory pool for all of crypto
79    library.  It should not be necessary anymore to separately register
80    default ciphers, HMACs, etc, the _init would do that.  However, if
81    user after _init calls silc_pkcs_register, for example, it would take
82    preference over the default once, ie. user can always dictate the
83    order of algorithms. (***DONE)
84
85  o Change SILC PKCS API to asynchronous, so that accelerators can be used.
86    All PKCS routines should now take callbacks as argument and they should
87    be delivered to SilcPKCSObject and SilcPKCSAlgorithm too. (***DONE)
88
89  o Change PKCS Algorithm API to take SilcPKCSAlgorithm as argument to
90    encrypt, decrypt, sign and verify functions.  We may need to for exmaple
91    check the alg->hash, supported hash functions.  Maybe deliver it also
92    to all other functions in SilcPKCSAlgorithm to be consistent. (***DONE)
93
94  o Add DSS support. (***DONE)
95
96  o All cipher, hash, hmac etc. allocation routines should take their name
97    in as const char * not const unsigned char *. (***DONE)
98
99
100 SKR Library, lib/silcskr/
101 =========================
102
103  o Add fingerprint as search constraint.
104
105  o Add SSH support. (***DONE, TESTING NEEDED)
106
107  o Add OpenPGP support.  Adding, removing, fetching PGP keys.  (Keyring
108    support?)
109
110  o Add support for importing public keys from a directory and/or from a
111    file.  Add support for exporting the repository (different formats for
112    different key types?).
113
114  o Add find rule AND and OR.  The default is always AND.  Add
115    silc_skr_find_set_rule.
116
117  o Add silc_skr_find_add_search_file that can be used to add a file to
118    search for the public keys.  More than one can be set.  Add support
119    for searching keys from file.
120
121  o Add silc_skr_find_add_search_dir that can be used to add a directory to
122    search for the public keys.  More than one can be set.  Add support
123    for seraching keys from directory.
124
125  o SilcStack to SKR API.
126
127
128 SILC Accelerator Library
129 ========================
130
131  o Diffie-Hellman acceleration to SILC Accelerator API.
132
133  o Diffie-Hellman software acceleration.
134
135  o Hardware acceleration through OCF (OCF-Linux,
136    http://ocf-linux.sourceforge.net).
137
138  o VIA Padlock support. See http://www.logix.cz/michal/devel/padlock/ and
139    Gladman's code.
140
141  o Implement GCM software acceleration.
142
143  o Add hash function acceleration to SILC Accelerator API.
144
145  o SILC Accelerator API.  Provides generic way to use different kind of
146    accelerators.  Basically implements SILC PKCS API so that SilcPublicKey
147    and SilcPrivateKey can be used but they call the accelerators.
148    (***DONE)
149
150  o Implement software accelerator.  It is a thread pool system where the
151    public key and private key operations are executed in threads.
152    (***DONE)
153
154  o Add SilcCipher support to SilcAccelerator and software accelerator.
155    Accelerate at least ciphers using CTR mode which can be done in
156    parallel.  Do it in producer/consumer fashion where threads generate
157    key stream and other thread(s) encrypt using the key stream. (***DONE)
158
159
160 lib/silcmath
161 ============
162
163  o Prime generation progress using callback instead of printing to
164    stdout.
165
166  o All utility functions should be made non-allocating ones.
167
168  o Import TFM.  We want TFM's speed but its memory requirements are
169    just too much.  By default it uses large pre-allocated tables which
170    will eat memory when there are thousands of public keys in system.
171    We probably want to change TFM. (***DONE)
172
173  o Add AND, OR and XOR support to TFM. (***DONE)
174
175  o The SILC MP API function must start returning indication of success
176    and failure of the operation. (***DONE)
177
178  o Do SilcStack support for silc_mp_init and other MP function
179    (including utility ones) that may allocate memory. (***DONE)
180
181
182 lib/silcasn1
183 ============
184
185  o Negative integer encoding is missing, add it.
186
187  o SILC_ASN1_CHOICE should perhaps return an index what choice in the
188    choice list was found.  Currently it is left for caller to figure out
189    which choice was found. (***DONE)
190
191  o SILC_ASN1_NULL in decoding should return SilcBool whether or not
192    the NULL was present.  It's important when it's SILC_ASN1_OPTIONAL
193    and we need to know whether it was present or not. (***DONE)
194
195
196 lib/silcpgp
197 ===========
198
199  o OpenPGP certificate support, allowing the use of PGP public keys and
200    private keys.
201
202  o Signatures for data, public keys and private keys (Signature packet).
203
204  o Signature verification from public keys, private keys and other signed
205    data (Signature packet).
206
207  o Encryption and decryption support (Packet tags 8 and 18 most likely).
208
209  o Retrieval of User ID from public key and private key (Used ID packet
210    and User Attribute packet).
211
212  o Creation of OpenPGP key pairs.
213
214  o Trust packet handling (GNU PG compatible) from public and private keys.
215
216  o Add option that the signature format doesn't use the OpenPGP format
217    but whatever is the default in SILC crypto library.
218
219
220 lib/silcssh
221 ===========
222
223  o Add option that the signature format doesn't use the SSH2 protocol
224    but whatever is the default in SILC crypto library;
225    silc_ssh_private_key_set_signature_type, or something.
226
227  o SSH2 public key/private key support, allowing the use of SSH2 keys.
228    RFC 4716.  (***DONE)
229
230
231 lib/silcpkix
232 ============
233
234  o PKIX implementation
235
236
237 lib/silccms
238 ===========
239
240  o Cryptographic Message Syntax (RFC 3852), the former PKCS #7
241
242
243 lib/silcsmime
244 =============
245
246  o S/MIME (RFC 3851)