Blame TODO

Packit Service 30b792
#+TITLE: TODO List
Packit d7e8d0
Hey Emacs, this is -*- org -*- mode!
Packit d7e8d0
Packit Service 30b792
* IMPORTANT!
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: dev-gnupg-org
Packit Service 30b792
  :END:
Packit Service 30b792
Packit Service 30b792
  There was a nine year gap (2009 to 2018) between edits of this file,
Packit Service 30b792
  so it is likely that much of the old information in it is wrong or
Packit Service 30b792
  no longer applicable.
Packit Service 30b792
Packit Service 30b792
  Bugs, feature requests and other development related work will be
Packit Service 30b792
  tracked through the [[https://dev.gnupg.org/][dev.gnupg.org]] site.
Packit Service 30b792
Packit Service 30b792
Packit Service 30b792
* Documentation
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: documentation
Packit Service 30b792
  :END:
Packit Service 30b792
Packit Service 30b792
** Document all the new stuff.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: more-docs-is-better
Packit Service 30b792
   :END:
Packit Service 30b792
Packit Service 30b792
*** TODO Fix this TODO list.
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: fix-todo
Packit Service 30b792
    :END:
Packit Service 30b792
Packit Service 30b792
    Clean up the current TODO list.  Include properties as relevant (so
Packit Service 30b792
    if someone does make a PDF or HTML version the TOC will work).
Packit Service 30b792
Packit Service 30b792
    Also check to see if some of these ancient things can be removed
Packit Service 30b792
    (e.g. do we really need to fix things that were broken in GPG
Packit Service 30b792
    1.3.x?  I'm thinking not so much).
Packit Service 30b792
Packit Service 30b792
**** DONE fix TODO items
Packit Service 30b792
     CLOSED: [2018-03-04 Sun 08:55]
Packit Service 30b792
     :PROPERTIES:
Packit Service 30b792
     :CUSTOM_ID: fix-todo-items
Packit Service 30b792
     :END:
Packit Service 30b792
Packit Service 30b792
     Adjust todo items so each can now be referenced by custom-id and
Packit Service 30b792
     checked off as necessary.
Packit Service 30b792
Packit Service 30b792
** TODO Document validity and trust issues.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: valid-trust-issues
Packit Service 30b792
   :END:
Packit Service 30b792
Packit Service 30b792
** In gpgme.texi: Register callbacks under the right letter in the index.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: gpgme-texi
Packit Service 30b792
   :END:
Packit Service 30b792
Packit Service 30b792
Packit d7e8d0
* Fix the remaining UI Server problems:
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: ui-server-fix
Packit Service 30b792
  :END:
Packit d7e8d0
** VERIFY --silent support.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: verify-silent
Packit Service 30b792
   :END:
Packit d7e8d0
** ENCRYPT/DECRYPT/VERIFY/SIGN reset the engine, shouldn't be done with UISERVER?
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: reset-engine-not-ui
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
Packit d7e8d0
* IMPORTANT
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: important-stuff-really
Packit Service 30b792
  :END:
Packit d7e8d0
** When using descriptor passing, we need to set the fd to blocking before
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: set-fd-blocking
Packit Service 30b792
   :END:
Packit Service 30b792
   issuing simple commands, because we are mixing synchronous
Packit d7e8d0
   commands into potentially asynchronous operations.
Packit Service 30b792
** Might want to implement nonblock for w32 native backend!
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: nonblock-win32
Packit Service 30b792
   :END:
Packit Service 30b792
   Right now we block reading the next line with assuan.
Packit Service 30b792
Packit d7e8d0
Packit d7e8d0
* Before release:
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: pre-release
Packit Service 30b792
  :END:
Packit Service 30b792
Packit Service 30b792
** CANCELLED Some gpg tests fail with gpg 1.3.4-cvs (gpg/t-keylist-sig)
Packit Service 30b792
   CLOSED: [2018-03-09 Fri 08:16]
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: gpg-1-3-4-really
Packit Service 30b792
   :END:
Packit Service 30b792
   - State "CANCELLED"  from "TODO"       [2018-03-09 Fri 08:16] \\
Packit Service 30b792
     WON'T FIX — too old or no longer applies.
Packit d7e8d0
   The test is currently disabled there and in gpg/t-import.
Packit Service 30b792
Packit d7e8d0
** When gpg supports it, write binary subpackets directly,
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: binary-subpackets
Packit Service 30b792
   :END:
Packit d7e8d0
   and parse SUBPACKET status lines.
Packit d7e8d0
Packit Service 30b792
Packit d7e8d0
* ABI's to break:
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: abi-breakage-apparently-on-purpose
Packit Service 30b792
  :END:
Packit Service 30b792
Packit d7e8d0
** Old opassuan interface.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: old-opassuan
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
** Implementation: Remove support for old style error codes in
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: remove-old-error-codes
Packit Service 30b792
   :END:
Packit d7e8d0
   conversion.c::_gpgme_map_gnupg_error.
Packit Service 30b792
Packit d7e8d0
** gpgme_edit_cb_t: Add "processed" return argument
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: add-processed-return
Packit Service 30b792
   :END:
Packit d7e8d0
   (see edit.c::command_handler).
Packit Service 30b792
Packit d7e8d0
** I/O and User Data could be made extensible.  But this can be done
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: add-io-user-data
Packit Service 30b792
   :END:
Packit d7e8d0
   without breaking the ABI hopefully.
Packit Service 30b792
Packit d7e8d0
** All enums should be replaced by ints and simple macros for
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: enums-should-be-ints
Packit Service 30b792
   :END:
Packit d7e8d0
   maximum compatibility.
Packit Service 30b792
Packit d7e8d0
** Compatibility interfaces that can be removed in future versions:
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: compat-interfaces-to-go
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
*** gpgme_data_new_from_filepart
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgme-data-new-from-filepart
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** gpgme_data_new_from_file
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgme-data-new-from-file
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** gpgme_data_new_with_read_cb
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgme-data-new-with-read-cb
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** gpgme_data_rewind
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgme-data-rewind
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** gpgme_op_import_ext
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgme-op-import-ext
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** gpgme_get_sig_key
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgme-get-sig-key
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** gpgme_get_sig_ulong_attr
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgme-get-sig-ulong-attr
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** gpgme_get_sig_string_attr
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgme-get-sig-string-attr
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** GPGME_SIG_STAT_*
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgme-sig-stat
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** gpgme_get_sig_status
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgme-get-sig-status
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** gpgme_trust_item_release
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgme-trust-item-release
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** gpgme_trust_item_get_string_attr
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgme-trust-item-get-string-attr
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** gpgme_trust_item_get_ulong_attr
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgme-trust-item-get-ulong-attr
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** gpgme_attr_t
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgme-attr-t
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** All Gpgme* typedefs.
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: all-gpgme-typedefs
Packit Service 30b792
    :END:
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
* Thread support:
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: threads
Packit Service 30b792
  :END:
Packit Service 30b792
Packit d7e8d0
** When GNU Pth supports sendmsg/recvmsg, wrap them properly.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: wrap-oth
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
** Without timegm (3) support our ISO time parser is not thread safe.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: time-threads
Packit Service 30b792
   :END:
Packit d7e8d0
   There is a configure time warning, though.
Packit d7e8d0
Packit Service 30b792
Packit d7e8d0
* New features:
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: new-features
Packit Service 30b792
  :END:
Packit Service 30b792
Packit d7e8d0
** Flow control for data objects.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: flow-control-is-not-a-euphemism-for-an-s-bend
Packit Service 30b792
   :END:
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 Service 30b792
Packit d7e8d0
** Extended notation support.  When gpg supports arbitrary binary
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: extended-notation
Packit Service 30b792
   :END:
Packit d7e8d0
   notation data, provide a user interface for that.
Packit Service 30b792
Packit d7e8d0
** notification system
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: notification-system
Packit Service 30b792
   :END:
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 Service 30b792
   usages too.  This notification 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 Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: learn-code
Packit Service 30b792
   :END:
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 Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: stat-data
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
** Implement support for photo ids.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: photo-id
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
** Allow selection of subkeys
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: subkey-selection
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
** Allow to return time stamps in ISO format
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: iso-format-datetime
Packit Service 30b792
   :END:
Packit Service 30b792
   This allows us to handle years later than 2037 properly.  With the
Packit Service 30b792
   time_t interface they are all mapped to 2037-12-31
Packit Service 30b792
Packit d7e8d0
** New features requested by our dear users, but rejected or left for
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: feature-requests
Packit Service 30b792
   :END:
Packit d7e8d0
   later consideration:
Packit Service 30b792
Packit d7e8d0
*** Allow to export secret keys.
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: export-secret-keys
Packit Service 30b792
    :END:
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 Service 30b792
Packit d7e8d0
*** Selecting the key ring, setting the version or comment in output.
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: select-keyring-version
Packit Service 30b792
    :END:
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 Service 30b792
Packit d7e8d0
*** Selecting the symmetric cipher.
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: symmetric-cipher-selection
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** Exchanging keys with key servers.
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: key-server-exchange
Packit Service 30b792
    :END:
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
* Engines
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: engines
Packit Service 30b792
  :END:
Packit Service 30b792
Packit d7e8d0
** Do not create/destroy engines, but create engine and then reset it.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: reset-engine-is-not-quite-just-ignition
Packit Service 30b792
   :END:
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 Service 30b792
Packit d7e8d0
** Optimize the case where a data object has an underlying fd we can pass
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: optimus-data-cousin-of-optimus-prime
Packit Service 30b792
   :END:
Packit d7e8d0
   directly to the engine.  This will be automatic with socket I/O and
Packit d7e8d0
   descriptor passing.
Packit Service 30b792
Packit d7e8d0
** Move code common to all engines up from gpg to engine.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: move-code-common-to-engines-out-of-gpg
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
** engine operations can return General Error on unknown protocol
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: general-error-looking-to-be-court-martialled
Packit Service 30b792
   :END:
Packit d7e8d0
   (it's an internal error, as select_protocol checks already).
Packit Service 30b792
Packit d7e8d0
** When server mode is implemented properly, more care has to be taken to
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: server-mode
Packit Service 30b792
   :END:
Packit d7e8d0
   release all resources on error (for example to free assuan_cmd).
Packit Service 30b792
Packit Service 30b792
** op_import_keys and op_export_keys have a limit in the number of keys.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: import-export-problems
Packit Service 30b792
   :END:
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 Service 30b792
Packit d7e8d0
* GPG breakage:
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: gpg-breakage
Packit Service 30b792
  :END:
Packit Service 30b792
Packit Service 30b792
** CANCELLED gpg 1.4.2 lacks error reporting if sign/encrypt with revoked key.
Packit Service 30b792
   CLOSED: [2018-03-09 Fri 08:19]
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: gpg-classic-lacks-stuff
Packit Service 30b792
   :END:
Packit Service 30b792
   - State "CANCELLED"  from "TODO"       [2018-03-09 Fri 08:19] \\
Packit Service 30b792
     WON'T FIX.
Packit Service 30b792
Packit Service 30b792
** CANCELLED gpg 1.4.2 does crappy error reporting (namely none at all) when
Packit Service 30b792
   CLOSED: [2018-03-09 Fri 08:20]
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: gpg-classic-problems-but-do-we-care
Packit Service 30b792
   :END:
Packit Service 30b792
   - State "CANCELLED"  from "TODO"       [2018-03-09 Fri 08:20] \\
Packit Service 30b792
     WON'T FIX.
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 Service 30b792
Packit Service 30b792
** DONE Without agent and with wrong passphrase, gpg 1.4.2 enters into an
Packit Service 30b792
   CLOSED: [2018-03-09 Fri 08:20]
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: recursive-gpg-classic
Packit Service 30b792
   :END:
Packit Service 30b792
   - State "DONE"       from "TODO"       [2018-03-09 Fri 08:20] \\
Packit Service 30b792
     Must have been fixed in a subsequent release.
Packit d7e8d0
   infinite loop.
Packit Service 30b792
Packit Service 30b792
** CANCELLED Use correct argv[0]
Packit Service 30b792
   CLOSED: [2018-03-09 Fri 08:24]
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: correct-argv
Packit Service 30b792
   :END:
Packit Service 30b792
   - State "CANCELLED"  from "TODO"       [2018-03-09 Fri 08:24] \\
Packit Service 30b792
     WON'T FIX.
Packit Service 30b792
Packit Service 30b792
     Also, there is no rungpg.c file in GPGME (or in GPG or most, if not
Packit Service 30b792
     all of the rest of the libs and packages; I suspect there hasn't been
Packit Service 30b792
     for a very long time).
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 Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: operations-are-not-surgical
Packit Service 30b792
  :END:
Packit Service 30b792
Packit d7e8d0
** Include cert values -2, -1, 0 and 1 should be defined as macros.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: certified-macros
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
** If an operation failed, make sure that the result functions don't return
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: operation-failure
Packit Service 30b792
   :END:
Packit d7e8d0
   corrupt partial information. !!!
Packit d7e8d0
   NOTE: The EOF status handler is not called in this case !!!
Packit Service 30b792
Packit d7e8d0
** Verify must not fail on NODATA premature if auto-key-retrieval failed.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: autobot-key-retrieval
Packit Service 30b792
   :END:
Packit d7e8d0
   It should not fail silently if it knows there is an error. !!!
Packit Service 30b792
Packit d7e8d0
** All operations: Better error reporting. !!
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: better-reporting-not-like-fox-news
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
** Export status handler need much more work. !!!
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: export-status-handler
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
** Import should return a useful error when one happened.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: import-useful-stuff-even-wrong-stuff
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
*** Import does not take notice of NODATA status report.
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: import-no-data
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** When GPGSM does issue IMPORT_OK status reports, make sure to check for
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: gpgsm-import-ok
Packit Service 30b792
    :END:
Packit d7e8d0
    them in tests/gpgs m/t-import.c.
Packit Service 30b792
Packit d7e8d0
** Verify can include info about version/algo/class, but currently
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: verify-class
Packit Service 30b792
   :END:
Packit d7e8d0
   this is only available for gpg, not gpgsm.
Packit Service 30b792
Packit d7e8d0
** Return ENC_TO output in verify result.  Again, this is not available
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: return-to-enc
Packit Service 30b792
   :END:
Packit d7e8d0
   for gpgsm.
Packit Service 30b792
Packit d7e8d0
** Genkey should return something more useful than General_Error.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: general-key-assumed-command-from-general-error
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
** If possible, use --file-setsize to set the file size for proper progress
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: file-setsize
Packit Service 30b792
   :END:
Packit d7e8d0
   callback handling.  Write data interface for file size.
Packit Service 30b792
Packit d7e8d0
** Optimize the file descriptor list, so the number of open fds is
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: optimus-descriptus-younger-brother-of-optimus-prime
Packit Service 30b792
   :END:
Packit d7e8d0
   always known easily.
Packit Service 30b792
Packit d7e8d0
** Encryption: It should be verified that the behaviour for partially untrusted
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: only-mostly-dead-means-partially-alive
Packit Service 30b792
   :END:
Packit d7e8d0
   recipients is correct.
Packit Service 30b792
Packit d7e8d0
** When GPG issues INV_something for invalid signers, catch them.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: invalid-sig
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
Packit d7e8d0
* Error Values
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: error-value
Packit Service 30b792
  :END:
Packit Service 30b792
Packit d7e8d0
** Map ASSUAN/GpgSM ERR error values in a better way than is done now. !!
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: map-ass-error
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
** Some error values should identify the source more correctly (mostly error
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: source-errors
Packit Service 30b792
   :END:
Packit d7e8d0
   values derived from status messages).
Packit Service 30b792
Packit d7e8d0
** In rungpg.c we need to check the version of the engine
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: rungpg-c-engine-ver
Packit Service 30b792
   :END:
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 Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: tests
Packit Service 30b792
  :END:
Packit Service 30b792
Packit Service 30b792
** TODO Write a fake gpg-agent so that we can supply known passphrases to
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: test-fake-gpg-agent
Packit Service 30b792
   :END:
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 Service 30b792
Packit d7e8d0
** t-data
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: test-data
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
*** Test gpgme_data_release_and_get_mem.
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: test-gpgme-data-release-mem
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
*** Test gpgme_data_seek for invalid types.
Packit Service 30b792
    :PROPERTIES:
Packit Service 30b792
    :CUSTOM_ID: test-gpgme-data-seek
Packit Service 30b792
    :END:
Packit Service 30b792
Packit d7e8d0
** t-keylist
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: test-keylist
Packit Service 30b792
   :END:
Packit d7e8d0
   Write a test for ext_keylist.
Packit Service 30b792
Packit d7e8d0
** Test reading key signatures.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: test-key-sig
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
Packit d7e8d0
* Debug
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: debug
Packit Service 30b792
  :END:
Packit Service 30b792
Packit d7e8d0
** Tracepoints should be added at: Every public interface enter/leave,
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: tracepoint-pub-int
Packit Service 30b792
   :END:
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 Service 30b792
Packit Service 30b792
** TODO Handle malloc and vasprintf errors.  But decide first if they should be
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: malloc-vasprintf
Packit Service 30b792
   :END:
Packit Service 30b792
Packit d7e8d0
   ignored (and logged with 255?!), or really be assertions. !
Packit d7e8d0
Packit Service 30b792
Packit d7e8d0
* Build suite
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: build-suite
Packit Service 30b792
  :END:
Packit Service 30b792
Packit Service 30b792
** TODO Make sure everything is cleaned correctly (esp. test area).
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: clean-tests
Packit Service 30b792
   :END:
Packit Service 30b792
Packit Service 30b792
** TODO Enable AC_CONFIG_MACRO_DIR and bump up autoconf version requirement.
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: autoconf-macros
Packit Service 30b792
   :END:
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 Service 30b792
Packit d7e8d0
* Error checking 
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: error-checking
Packit Service 30b792
  :END:
Packit Service 30b792
Packit Service 30b792
** TODO engine-gpgsm, with-validation
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: gpgsm-validation
Packit Service 30b792
   :END:
Packit d7e8d0
   Add error checking some time after releasing a new gpgsm.
Packit d7e8d0
Packit d7e8d0
Packit Service 30b792
* Language bindings and related components
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: language-bindings-and-related-stuff
Packit Service 30b792
  :END:
Packit Service 30b792
Packit Service 30b792
** TODO Emacs and elisp binding
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: emacs-and-elisp
Packit Service 30b792
   :END:
Packit Service 30b792
Packit Service 30b792
   Currently GNU Emacs uses EPA and EPG to provide GnuPG support.  EPG
Packit Service 30b792
   does this by calling the GPG executable and wrapping the commands
Packit Service 30b792
   with elisp functions.  A more preferable solution would be to
Packit Service 30b792
   implement an epgme.el which integrated with GPGME, then if it could
Packit Service 30b792
   not to attempt calling the gpgme-tool and only if those failed to
Packit Service 30b792
   fall back to the current epg.el and calling the command line
Packit Service 30b792
   binaries.
Packit Service 30b792
Packit Service 30b792
** TODO API of an API
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: api-squared
Packit Service 30b792
   :END:
Packit Service 30b792
Packit Service 30b792
   See the more detailed notes on this in the [[lang/python/docs/TODO.org][python TODO]].
Packit Service 30b792
Packit Service 30b792
** TODO GPGME installation and package management guide
Packit Service 30b792
   :PROPERTIES:
Packit Service 30b792
   :CUSTOM_ID: package-management
Packit Service 30b792
   :END:
Packit Service 30b792
Packit Service 30b792
   Write a guide/best practices for maintainers of GPGME packages with
Packit Service 30b792
   third party package management systems.
Packit Service 30b792
Packit Service 30b792
Packit Service 30b792
* Copyright 2004, 2005, 2018 g10 Code GmbH
Packit Service 30b792
  :PROPERTIES:
Packit Service 30b792
  :CUSTOM_ID: copyright-and-license
Packit Service 30b792
  :END:
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.