Completed Items

1.     Inform the kernel of the key.
2.     Add colors to the kernel widgets. On Windows platforms,
       the kernel path must represent a readable program. On other platforms,
       the path must represent an executable program.
3.     If the passphrase is not set, disable all other tabs. Also
       disable the kernel and listeners group boxes.
4.     Sticky needs a tooltip describing the feature.
5.     Add a check box to hide all disconnected neighbors. This was
       completed, however, it was removed on 06/03/2013. The option
       may cause confusion when a new neighbor is defined if a uniqueness
       error arises. Similar confusion may arise for listeners.
6.     Improve the IP input masks. Removed the underscores so that the
       space bar may be used. Attached returnPressed() signals to
       listener and neighbor IP widgets.
7.     When the RSA key generation is finished, a confirmation should
       be displayed.
8.     The context menu to share the public key should be a button.
9.     Add an icon to a connected neighbor.
10.    libspoton.dll needs to be installed in the executable's path.
11.    Add presence information to the Participants table.
12.    Provide a means of sending a message to friends only.
13.    Add UUIDs to neighbors.
14.    Display additional information pertaining to network information in
       the Neighbors table.
15.    Re-encode various databases whenever the passphrase is changed.
16.    Offline e-mail.
17.    Qt 4.6.3 support. Please ignore. Qt 4.6.x and older are not
       supported.
18.    Use QSslSockets.
19.    Inspect toInt() results.
20.    Encrypt the uuid field in the neighbors.db database.
21.    Encrypt-then-MAC.
       (http://cseweb.ucsd.edu/~mihir/papers/oem.html)
22.    Some messages are echoed. The transfer method (get, post) of the
       original message should be respected.
23.    Inspect spoton_crypt's hash failures.
24.    Secure connections between the interfaces and the kernel.
25.    Dedicated lines. Such lines, if enabled by both parties, do
       not allow echoed data.
26.    The re-encoding phase may produce errors. Delete corrupt entries.
27.    All database names should be unique.
28.    Depict listeners that support SSL.
29.    Echo mode for listeners.
30.    Reset keep-alive timers if valid data has been processed.
31.    The kernel should behave as a pass-through device if
       participants are not defined. However, it should emit
       scrambled messages if necessary.
32.    Improve kernel congestion cache.
33.    Complete max. Neighbors fields.
34.    Do not destroy the children of an inactive listener. Provide a context
       menu action instead.
35.    Do not store SSL keys in listeners.db and neighbors.db.
36.    The number of connections in the Listeners table may be incorrect.
37.    Full/half-echo listeners context menu option. Children neighbors
       remain as configured.
38.    TTLs may be used to describe Spot-On graphs. Alternative?
39.    A Spot-On node may create a non-specific message having a high TTL
       with the scope of exploring graphs. The insight would be broken
       by nodes having congestion controls. TTLs need to be reviewed.
40.    Review SQL update statements.
41.    Function to separate children from listeners.
42.    Limit sending of information to the kernel. See
       spoton::slotKernelSocketState().
43.    Simplify messages. Hide header information.
44.    Local and long distance calling feature to limit PKI.
45.    Add optional signatures for inbound and outbound traffic.
46.    Bulk key copies, per the friendly Mr. Smith.
47.    Provide IP blocking capabilities.
48.    Include external IP addresses in listener certificates.
49.    Review process signals for the kernel.
50.    E-mail retrieval may fail if a node is disconnected because of
       a lifetime expiration. Other communications may fail too.
51.    Permanent certificates.
52.    Statistics.
53.    Introduce DSA and ElGamal.
54.    SQL injection.
55.    Record sent data as it may be returned via an echo.
56.    Correct implementation of the Encrypt-then-MAC usage. One key
       should be used for encryption and a separate key for generating
       the MAC.
57.    Favorite channels.
58.    Remove UTF-8 conversions in spoton_crypt::saltedPassphraseHash().
59.    Use separate hash keys with geminis.
60.    Inspect UTF-8 uses.
61.    Rewind support for transmitted mosaics.
62.    Integer overflows!
63.    Create a Tools menu. Provide mechanisms for decrypting and encrypting
       data that's been transmitted via non-Spot. That is, a feature
       to copy encrypted content and send it via other applications.
64.    Separate keys should be used for storing keyed hashes.
65.    Prevent replay attacks of authenticated sessions.
66.    Artificial impersonators.
67.    Add url logic to spoton::addFriendsKey().
68.    Provide a means of exporting and importing keys.
69.    Inbound data should be time-tagged. Nodes must purge
       containers of old data. Otherwise, one could be inundated with
       seemingly-qualified data. Nasty!
70.    SCTP.
71.    Feature to discover missing pulses.
72.    Store MACs of encrypted data along with the encrypted data.
73.    There may be an issue with the validity of stored e-mail. That is,
       retrieving e-mail from another node may retrieve compromised content.
       Inspect it!
74.    Encrypt public keys of other participants.
75.    Semi-anonymous post office boxes. Please see Institutions.
76.    Message of the day (motd).
77.    Store the id field in idiotes.db in a secure manner.
78.    Encrypt participants public keys. Keyed hashes using the public
       key as the key? Slow retrieval.
79.    Echo star systems.
80.    Adaptive Echo. See also Echo Star Systems. Configured Spot nodes
       will direct traffic based on secret tokens.
81.    Limit client connections by IP address.
82.    Purge items from post_office if their dates are invalid.
83.    Perform calling over geminis.
84.    Accounts and allowed IP addresses suffer selection issues.
85.    NTRU support.
86.    Support ECC, or not. Signatures supported.
87.    IMAP and POP3.

Ignored Items

1.     The kernel should fetch a node's external IP address. Not ideal for
       listeners that are connected on interfaces having different external
       addresses.
2.     Use super-secure memory? Used here and there.
3.     CGI for listeners.
4.     Customize expiration timers.
5.     Include licenses of other software where applicable.
       Satisfy the license soldiers.
6.     Provide a total silent mode. Cumbersome.
7.     Introduce spoton_misc::findOptimalKeyLengthForPublicKey(). The method
       will allow Spot-On to select optimal lengths for digest keys based
       on provided content and public keys. Version 0.06 introduced
       digest keys that are restricted to 32 bytes.
8.     Prioritize keep-alive messages.
9.     Auto-clear textedit widgets that contain too much data.
10.    Monitor kernel health from the UI. See
       spoton::slotGeneralTimerTimeout().
11.    Entering geminis is difficult.
12.    Participant count may be possible based on asymmetric ciphertexts.
       Research?
13.    Optional OTR because it's so pretty.
14     Zero-knowledge passphrase authentication.
15.    Add SRP for account verification. What is this, the NSA?
16.    Gold Bugs and Novas should have separate hash keys. Not really.
       The data that's encrypted by gold bugs exists within data that is
       linked with authentication. Similarly for novas. This is too silly.
17.    Allow for other ciphers besides AES for e-mail.
18.    Introduce load balancing of echoes. We're not interested in real-time
       responses. Congestion control is helpful, however, short graphs
       tend to be skewed.
19.    Per request, provide an automatic StarBeam rewind mechanism with a
       timer.
20.    Account credentials should not be recorded via reversible encryption.
       Derive keys? I really like the two-step mutual authentication.
21.    Enable SQLite foreign key support via PRAGMA foreign_keys = ON.
22.    Database entries containing hashes can be maliciously twisted. Encrypt?

Remaining Items

1.     Cosmic proxy.
2.     Sequencial encryption. Verify that the user's key is independent of
       the random key. Separate cipher algorithms?
3.     Country flags and names for host names
       (spoton_misc::countryCodeFromName()).
4.     Do something about whitespace. There are many input paths that
       ought to be considered.
5.     Scramblers are too periodic.
6.     Hard kernel termination. Control session separation.
7.     Colorful HTTP headers. Custom protocol messages for rapid redeployment.
8.     Remote kernel termination.
9.     Artificial trust. All participants must play nicely. Zero-knowledge?
10.    What to do about corrupt database values?
11.    Implement a Qt class in support of DTLS.
12.    Limit the number of entries that are allowed to be inserted into
       a database.
13.    Allow pass-through flow of non-Spot-On data.
14.    Android build.
15.    Derive keys from master GoldBug keys.
16.    QFSFileEngine::open: No file name specified: created from
       e-mail.
17.    E-mail institutions do not require dispatcher signatures.
18.    Notify user of potential replays.
19.    Counting users is possible. Gathering message attributes is
       also possible. See group information in MESSAGES.
20.    Add support for crypto++.
21.    1-N SCTP support.
22.    Add log filters.
23.    Lots of kernel activity may cause libgcrypt fatigue.
24.    There is some redundant deciphering of data: findMessageType()
       followed by process() routines.
25.    Move the kernel off of the local machine. Review all Common and
       GUI source for local database access. libspoton may require
       changes with respect to kernel presence. Or, create an access library.
       Or, PostgreSQL!
26.    The timers that support gathering of external IP addresses burden
       kernel objects with unnecessary work. If the machine's external IP
       address changes while connections are already established, the
       state timers will eventually cause objects to be reset and therefore
       new attempts will be made to capture the external IP addresses. Review!
27.    Prevent inserts of own keys in friends_public_keys.db.
28.    Wormholes for streamed data.
29.    Sieve machine for better congestion control and less repetitive
       work.
30.    User configuration files are not encrypted.
31.    Artificial pauses. Suppose an inbound packet requires t0 time to
       process. Pause the current thread for T - t0 seconds, where T is some
       reasonable time.
32.    The libgcrypt library supports GCRY_KDF_SCRYPT.
33.    Weather feeds.
34.    Create a user's configuration database. Store key types too.
35.    Hybrid group communications based on deterministic key pairs.
36.    The data stored in shared.db is not authenticated. Uniqueness
       is not properly defined.
37.    Provide GCM mode. libgcrypt 1.6.x is required.
38.    Allow user to bookmark search results. Also allow searching of
       bookmarked entries. Perhaps provide a means of searching the
       global databases as well as bookmarked entries.
39.    Allow programs such as netcat to feed data to Spot-On. Specific
       private listeners would be capable of transforming the data
       into StarBeam pulses.
40.    Create a commanding language. The language could be used to
       navigate private Spot-On nodes remotely.
41.    An interface for custom functions. Such an interface could be used
       to transform YouTube data into MP3s.
