Hi Kevin,

On Wednesday, 2015-02-11 19:57:18 -0800, Kevin J. McCarthy wrote:

> First, just a general note.  If you add (see #3695) to the top of
> a patch, the commit will be associated with the ticket automatically.

Mentioning the number like in (part of #3695) does not? Ok, I'll use
'see' then.

> For the pgp_getkeybystr() patch, I'd really like to have the fingerprint
> stored in the pgp_key_t structure, rather than in one of the address
> records.

But then the fingerprint wouldn't be displayed in the list, or would it?
The nice side effect currently is, that the fingerprints of all matching
keys are displayed, regardless whether a fingerprint was queried or not.
I suggest to leave that to a follow-up change once displaying
fingerprints is implemented properly.

> However, if the eventual goal is to
> switch the interface to show fingerprints, it would be better to have it
> in the pgp_key_t struct.

Makes sense in the long term.

> (As an aside, another problem with the current implementation is
> that trust values aren't present in the pgp_uid_t record for the
> fingerprint.)

Maybe that could be inherited from the primary uid.

> > For both the pgp_list_pubring_command and pgp_list_secring_command
> > need to contain the --with-fingerprint option, or have
> > with-fingerprint in ~/.gnupg/gpg.conf
> 
> It would be good to include modifications to contrib/gpg.rc inside the
> patchset.

Yeah, I'll do.

> I would also suggest adding the '--with-fingerprint' option
> twice, so that subkeys also get a fingerprint record.  (Which would of
> course only be used if OPTPGPIGNORESUB was unset)

Can do as well.


> In both of the "getkeybystr" modifications, I'd like to see the comparison
> kept more simple:
> 
> > diff --git a/pgpkey.c b/pgpkey.c
> 
> >      if (!*p ||
> > -        (ps != pl && mutt_strcasecmp (pl, pgp_long_keyid (k)) == 0) ||
> > -        (ps == pl && mutt_strcasecmp (ps, pgp_short_keyid (k)) == 0))
> > +        (!pfcopy &&
> > +         ((pl && mutt_strcasecmp (pl, pgp_long_keyid (k)) == 0) ||
> > +          (ps && !pl && mutt_strcasecmp (ps, pgp_short_keyid (k)) == 0))))
> 
> Since pfcopy, pl, and ps are all mutually exclusive, it would be clearer
> just to have:
>     if (!*p ||
>         (pfcopy && mutt_strcasecmp (pfcopy, k->fingerprint) == 0) ||
>         (pl && mutt_strcasecmp (pl, pgp_long_keyid (k)) == 0) ||
>         (ps && mutt_strcasecmp (ps, pgp_short_keyid (k)) == 0))

But that would mean to rely on an implementation detail of
crypt_get_fingerprint_or_id(). As is, implementation could be changed to
assign pointers to all possible valid IDs found and the comparison here
would still work correctly. If we simplify it, adding a contract to
crypt_get_fingerprint_or_id(), at least in its description, would be
necessary/helpful for the next dev.

> > diff --git a/crypt-gpgme.c b/crypt-gpgme.c

Same.


> > diff --git a/crypt.c b/crypt.c
> > +  /* Check if a fingerprint is given, must be hex digits only, blanks
> > +   * separating groups of 4 hex digits are allowed. Also pre-check for ID. 
> > */
> > +  isid = 2;             /* unknown */
> > +  s1 = s2 = pf;
> > +  do
> > +  {
> > +    c = *(s2++);
> > +    if (('0' <= c && c <= '9') || ('A' <= c && c <= 'F') || ('a' <= c && c 
> > <= 'f'))
> > +    {
> > +      ++s1;             /* hex digit */
> > +      if (isid == 2)
> > +        isid = 1;       /* it is an ID so far */
> > +    }
> 
> You can ignore this comment, as it's your patch and mutt already has
> plenty of code more complicated than this ;-).  But wouldn't it be
> clearer just to rename "s1" to something like "hex_digit_count" and
> start it at 0?  Having variables like s1, s2, and pf made me have to
> stare at this code longer than I should to make sure I understood it.

It's simple ;)  s1 is the first, left pointer to copy to; s2 is the
second, right pointer to copy from. But I can change it to whatever you
wish if you want ;-)

> I'm a little uncomfortable with the code just assuming anything with
> modulo-4 spaces and a correct length is a fingerprint.

It doesn't, but you already found that out in the mean time ;-)

> It's an edge case, but if we want to remove the spaces, I would be more
> comfortable if we made sure all the characters were hex-digits, and
> return a LIST with both the original and de-spaced versions as hints.

Hmm.. given that only grouped hex digits of the correct length are
stripped of spaces, I think this is not necessary (anymore)?

> I did notice gpg will return the correct result if I search using
> the fingerprint with spaces in it.  Perhaps we could return the
> "with-spaces" version as the hint, or just remove hint as a parameter
> and just use "p" in the getkeybystr functions?

With spaces works with gpg command line, I'm not sure how gpgme would
handle that, I didn't try. Passing the stripped fingerprint works in all
cases.

I'll come up with amended patches later.

  Eike

-- 
OpenPGP/GnuPG encrypted mail preferred in all private communication.
Key "ID" 0x65632D3A - 2265 D7F3 A7B0 95CC 3918  630B 6A6C D5B7 6563 2D3A
Better use 64-bit 0x6A6CD5B765632D3A here is why: https://evil32.com/
Care about Free Software, support the FSFE https://fsfe.org/support/?erack
Use LibreOffice! https://www.libreoffice.org/

Attachment: signature.asc
Description: Digital signature

Reply via email to