Blame TODO

Packit d7e8d0
Hey Emacs, this is -*- org -*- mode!
Packit d7e8d0
Packit d7e8d0
* Document all the new stuff.
Packit d7e8d0
* Fix the remaining UI Server problems:
Packit d7e8d0
** VERIFY --silent support.
Packit d7e8d0
** ENCRYPT/DECRYPT/VERIFY/SIGN reset the engine, shouldn't be done with UISERVER?
Packit d7e8d0
Packit d7e8d0
* IMPORTANT
Packit d7e8d0
** When using descriptor passing, we need to set the fd to blocking before
Packit d7e8d0
   issueing simple commands, because we are mixing synchronous
Packit d7e8d0
   commands into potentially asynchronous operations.
Packit d7e8d0
** Might want to implement nonblock for w32 native backend!  Right now,
Packit d7e8d0
   we block reading the next line with assuan.
Packit d7e8d0
Packit d7e8d0
* Before release:
Packit d7e8d0
** Some gpg tests fail with gpg 1.3.4-cvs (gpg/t-keylist-sig)
Packit d7e8d0
   The test is currently disabled there and in gpg/t-import.
Packit d7e8d0
** When gpg supports it, write binary subpackets directly,
Packit d7e8d0
   and parse SUBPACKET status lines.
Packit d7e8d0
Packit d7e8d0
* ABI's to break:
Packit d7e8d0
** Old opassuan interface.
Packit d7e8d0
** Implementation: Remove support for old style error codes in
Packit d7e8d0
   conversion.c::_gpgme_map_gnupg_error.
Packit d7e8d0
** gpgme_edit_cb_t: Add "processed" return argument
Packit d7e8d0
   (see edit.c::command_handler).
Packit d7e8d0
** I/O and User Data could be made extensible.  But this can be done
Packit d7e8d0
   without breaking the ABI hopefully.
Packit d7e8d0
** All enums should be replaced by ints and simple macros for
Packit d7e8d0
   maximum compatibility.
Packit d7e8d0
** Compatibility interfaces that can be removed in future versions:
Packit d7e8d0
*** gpgme_data_new_from_filepart
Packit d7e8d0
*** gpgme_data_new_from_file
Packit d7e8d0
*** gpgme_data_new_with_read_cb
Packit d7e8d0
*** gpgme_data_rewind
Packit d7e8d0
*** gpgme_op_import_ext
Packit d7e8d0
*** gpgme_get_sig_key
Packit d7e8d0
*** gpgme_get_sig_ulong_attr
Packit d7e8d0
*** gpgme_get_sig_string_attr
Packit d7e8d0
*** GPGME_SIG_STAT_*
Packit d7e8d0
*** gpgme_get_sig_status
Packit d7e8d0
*** gpgme_trust_item_release
Packit d7e8d0
*** gpgme_trust_item_get_string_attr
Packit d7e8d0
*** gpgme_trust_item_get_ulong_attr
Packit d7e8d0
*** gpgme_attr_t
Packit d7e8d0
*** All Gpgme* typedefs.
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
* Thread support:
Packit d7e8d0
** When GNU Pth supports sendmsg/recvmsg, wrap them properly.
Packit d7e8d0
** Without timegm (3) support our ISO time parser is not thread safe.
Packit d7e8d0
   There is a configure time warning, though.
Packit d7e8d0
Packit d7e8d0
* New features:
Packit d7e8d0
** Flow control for data objects.
Packit d7e8d0
   Currently, gpgme_data_t objects are assumed to be blocking.  To
Packit d7e8d0
   break this assumption, we need either (A) a way for an user I/O
Packit d7e8d0
   callback to store the current operation in a continuation that can
Packit d7e8d0
   be resumed later.  While the continuation exists, file descriptors
Packit d7e8d0
   associated with this operation must be removed from their
Packit d7e8d0
   respective event loop.  or (B) a way for gpgme data objects to be
Packit d7e8d0
   associated with a waitable object, that can be registered with the
Packit d7e8d0
   user event loop.  Neither is particularly simple.
Packit d7e8d0
** Extended notation support.  When gpg supports arbitrary binary
Packit d7e8d0
   notation data, provide a user interface for that.
Packit d7e8d0
** notification system
Packit d7e8d0
   We need a simple notification system, probably a simple callback
Packit d7e8d0
   with a string and some optional arguments.  This is for example
Packit d7e8d0
   required to notify an application of a changed smartcard, The
Packit d7e8d0
   application can then do whatever is required.  There are other
Packit d7e8d0
   usages too.  This notfication system should be independent of any
Packit d7e8d0
   contextes of course.
Packit d7e8d0
Packit d7e8d0
   Not sure whether this is still required.  GPGME_PROTOCOL_ASSUAN is
Packit d7e8d0
   sufficient for this.
Packit d7e8d0
Packit d7e8d0
** --learn-code support
Packit d7e8d0
   This might be integrated with import. we still need to work out how
Packit d7e8d0
   to learn a card when gpg and gpgsm have support for smartcards.  In
Packit d7e8d0
   GPA we currently invoke gpg directly.
Packit d7e8d0
Packit d7e8d0
** Might need a stat() for data objects and use it for length param to gpg.
Packit d7e8d0
** Implement support for photo ids.
Packit d7e8d0
** Allow selection of subkeys
Packit d7e8d0
** Allow to return time stamps in ISO format
Packit d7e8d0
  This allows us to handle years later than 2037 properly.  With the
Packit d7e8d0
  time_t interface they are all mapped to 2037-12-31
Packit d7e8d0
** New features requested by our dear users, but rejected or left for
Packit d7e8d0
   later consideration:
Packit d7e8d0
*** Allow to export secret keys.
Packit d7e8d0
    Rejected because this is conceptually flawed.  Secret keys on a
Packit d7e8d0
    smart card can not be exported, for example.
Packit d7e8d0
    May eventually e supproted with a keywrapping system.
Packit d7e8d0
*** Selecting the key ring, setting the version or comment in output.
Packit d7e8d0
    Rejected because the naive implementation is engine specific, the
Packit d7e8d0
    configuration is part of the engine's configuration or readily
Packit d7e8d0
    worked around in a different way
Packit d7e8d0
*** Selecting the symmetric cipher.
Packit d7e8d0
*** Exchanging keys with key servers.
Packit d7e8d0
Packit d7e8d0
* Documentation
Packit d7e8d0
** Document validity and trust issues.
Packit d7e8d0
** In gpgme.texi: Register callbacks under the right letter in the index.
Packit d7e8d0
Packit d7e8d0
* Engines
Packit d7e8d0
** Do not create/destroy engines, but create engine and then reset it.
Packit d7e8d0
   Internally the reset operation still spawns a new engine process,
Packit d7e8d0
   but this can be replaced with a reset later.  Also, be very sure to
Packit d7e8d0
   release everything properly at a reset and at an error.  Think hard
Packit d7e8d0
   about where to guarantee what (ie, what happens if start fails, are
Packit d7e8d0
   the fds unregistered immediately - i think so?)
Packit d7e8d0
   Note that we need support in gpgsm to set include-certs to default
Packit d7e8d0
   as RESET does not reset it, also for no_encrypt_to and probably
Packit d7e8d0
   other options.
Packit d7e8d0
** Optimize the case where a data object has an underlying fd we can pass
Packit d7e8d0
   directly to the engine.  This will be automatic with socket I/O and
Packit d7e8d0
   descriptor passing.
Packit d7e8d0
** Move code common to all engines up from gpg to engine.
Packit d7e8d0
** engine operations can return General Error on unknown protocol
Packit d7e8d0
   (it's an internal error, as select_protocol checks already).
Packit d7e8d0
** When server mode is implemented properly, more care has to be taken to
Packit d7e8d0
   release all resources on error (for example to free assuan_cmd).
Packit d7e8d0
** op_import_keys and op_export_keys have a limit ion the number of keys.
Packit d7e8d0
   This is because we pass them in gpg via the command line and gpgsm
Packit d7e8d0
   via an assuan control line.  We should pipe them instead and maybe
Packit d7e8d0
   change gpg/gpgsm to not put them in memory.
Packit d7e8d0
Packit d7e8d0
* GPG breakage:
Packit d7e8d0
** gpg 1.4.2 lacks error reporting if sign/encrypt with revoked key.
Packit d7e8d0
** gpg 1.4.2 does crappy error reporting (namely none at all) when
Packit d7e8d0
   smart card is missing for sign operation:
Packit d7e8d0
    [GNUPG:] CARDCTRL 4
Packit d7e8d0
    gpg: selecting openpgp failed: ec=6.110
Packit d7e8d0
    gpg: signing failed: general error
Packit d7e8d0
    [GNUPG:] BEGIN_ENCRYPTION 2 10
Packit d7e8d0
    gpg: test: sign+encrypt failed: general error
Packit d7e8d0
** Without agent and with wrong passphrase, gpg 1.4.2 enters into an
Packit d7e8d0
   infinite loop.
Packit d7e8d0
** Use correct argv[0]
Packit d7e8d0
   In rungpg.c:build_argv we use
Packit d7e8d0
      argv[argc] = strdup ("gpg"); /* argv[0] */
Packit d7e8d0
   This should be changed to take the real file name used in account.
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
* Operations
Packit d7e8d0
** Include cert values -2, -1, 0 and 1 should be defined as macros.
Packit d7e8d0
** If an operation failed, make sure that the result functions don't return
Packit d7e8d0
   corrupt partial information. !!!
Packit d7e8d0
   NOTE: The EOF status handler is not called in this case !!!
Packit d7e8d0
** Verify must not fail on NODATA premature if auto-key-retrieval failed.
Packit d7e8d0
   It should not fail silently if it knows there is an error. !!!
Packit d7e8d0
** All operations: Better error reporting. !!
Packit d7e8d0
** Export status handler need much more work. !!!
Packit d7e8d0
** Import should return a useful error when one happened.
Packit d7e8d0
*** Import does not take notice of NODATA status report.
Packit d7e8d0
*** When GPGSM does issue IMPORT_OK status reports, make sure to check for
Packit d7e8d0
    them in tests/gpgs m/t-import.c.
Packit d7e8d0
** Verify can include info about version/algo/class, but currently
Packit d7e8d0
   this is only available for gpg, not gpgsm.
Packit d7e8d0
** Return ENC_TO output in verify result.  Again, this is not available
Packit d7e8d0
   for gpgsm.
Packit d7e8d0
** Genkey should return something more useful than General_Error.
Packit d7e8d0
** If possible, use --file-setsize to set the file size for proper progress
Packit d7e8d0
   callback handling.  Write data interface for file size.
Packit d7e8d0
** Optimize the file descriptor list, so the number of open fds is
Packit d7e8d0
   always known easily.
Packit d7e8d0
** Encryption: It should be verified that the behaviour for partially untrusted
Packit d7e8d0
   recipients is correct.
Packit d7e8d0
** When GPG issues INV_something for invalid signers, catch them.
Packit d7e8d0
Packit d7e8d0
* Error Values
Packit d7e8d0
** Map ASSUAN/GpgSM ERR error values in a better way than is done now. !!
Packit d7e8d0
** Some error values should identify the source more correctly (mostly error
Packit d7e8d0
   values derived from status messages).
Packit d7e8d0
** In rungpg.c we need to check the version of the engine
Packit d7e8d0
   This requires a way to get the cached version number from the
Packit d7e8d0
   engine layer.
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
* Tests
Packit d7e8d0
** Write a fake gpg-agent so that we can supply known passphrases to
Packit d7e8d0
   gpgsm and setup the configuration files to use the agent.  Without
Packit d7e8d0
   this we are testing a currently running gpg-agent which is not a
Packit d7e8d0
   clever idea. !
Packit d7e8d0
** t-data
Packit d7e8d0
*** Test gpgme_data_release_and_get_mem.
Packit d7e8d0
*** Test gpgme_data_seek for invalid types.
Packit d7e8d0
** t-keylist
Packit d7e8d0
   Write a test for ext_keylist.
Packit d7e8d0
** Test reading key signatures.
Packit d7e8d0
Packit d7e8d0
* Debug
Packit d7e8d0
** Tracepoints should be added at: Every public interface enter/leave,
Packit d7e8d0
   before and in every callback, at major decision points, at every
Packit d7e8d0
   internal data point which might easily be observed by the outside
Packit d7e8d0
   (system handles).  We also trace handles and I/O support threads in
Packit d7e8d0
   the w32 implementation because that's fragile code.
Packit d7e8d0
   Files left to do:
Packit d7e8d0
   data-fd.c data-mem.c data-stream.c data-user.c debug.c rungpg.c
Packit d7e8d0
   engine.c engine-gpgsm.c funopen.c w32-glib-io.c wait.c
Packit d7e8d0
   wait-global.c wait-private.c wait-user.c op-support.c decrypt.c
Packit d7e8d0
   decrypt-verify.c delete.c edit.c encrypt.c encrypt-sign.c export.c
Packit d7e8d0
   genkey.c import.c key.c keylist.c passphrase.c progress.c signers.c
Packit d7e8d0
   sig-notation.c trust-item.c trustlist.c verify.c
Packit d7e8d0
** Handle malloc and vasprintf errors.  But decide first if they should be
Packit d7e8d0
   ignored (and logged with 255?!), or really be assertions. !
Packit d7e8d0
Packit d7e8d0
* Build suite
Packit d7e8d0
** Make sure everything is cleaned correctly (esp. test area).
Packit d7e8d0
** Enable AC_CONFIG_MACRO_DIR and bump up autoconf version requirement.
Packit d7e8d0
   (To fix "./autogen.sh; ./configure --enable-maintainer-mode; touch
Packit d7e8d0
   configure.ac; make").  Currently worked around with ACLOCAL_AMFLAGS???
Packit d7e8d0
Packit d7e8d0
* Error checking 
Packit d7e8d0
** engine-gpgsm, with-validation
Packit d7e8d0
   Add error checking some time after releasing a new gpgsm.
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
Copyright 2004, 2005 g10 Code GmbH
Packit d7e8d0
Packit d7e8d0
This file is free software; as a special exception the author gives
Packit d7e8d0
unlimited permission to copy and/or distribute it, with or without
Packit d7e8d0
modifications, as long as this notice is preserved.
Packit d7e8d0
Packit d7e8d0
This file is distributed in the hope that it will be useful, but
Packit d7e8d0
WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
Packit d7e8d0
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit d7e8d0
PURPOSE.