Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement g:GPGReplaceKeys to automatically replace keys #103

Open
ThomasAH opened this issue Jul 3, 2019 · 2 comments
Open

Implement g:GPGReplaceKeys to automatically replace keys #103

ThomasAH opened this issue Jul 3, 2019 · 2 comments
Milestone

Comments

@ThomasAH
Copy link
Contributor

ThomasAH commented Jul 3, 2019

I have attached two patches against 2.6.1 (because master currently does not work for me):

fields4-identity.patch: a trivial cleanup patch that replaces multiple uses of fields[4], later followed by let identity = fields[4] with setting identity earlier and using that. The following patch would otherwise introduce another use of fields[4], which I wanted to avoid.

auto-replace-keys.patch: This is the main patch:
Implement g:GPGReplaceKeys to automatically replace keys

If set, this dictionary allows to automatically replace keys of recipients with other keys when loading encrypted files (value is the new key id) or to automatically drop those keys (value is an
empty string). When searching for recipients by name (e.g. by using :GPGEditRecipients) the keys included in this dictionary will be omitted from search results. Default is unset. Example:

  let g:GPGReplaceKeys = {
    \'5BB3F5195816791A': 'D45DE28FF3A2250C',
    \'79467CE91DF85848': '',
  \}

fields4-identity.patch.txt
auto-replace-keys.patch.txt

Not part of the patches just included if someone wants to use it in the same way as we do, our central vimrc contains the following code and uses the same replacekeys.txt file format as used by generate-openpgpkey-hu on https://wiki.gnupg.org/WKDHosting:

function s:parse_replacekeys(index, line)
  " Format of replacekeys.txt:
  " - old_id new_id # to replace
  " - old_id        # to remove
  " for old_id use long (16 hex digits) ids of main key (if the key is still in
  " the common keyring) or subkey (if it has been removed and zugang complains)
  " for new_id you can use 16 hex digits or the fingerprint of the main key
  "
  " 5BB3F5195816791A 0B4E190B70DBACF2BE4D97F0D45DE28FF3A2250C # replace a key
  " 76591CAB0E2063E3 # remove a key
  let old_new = matchlist(a:line, '^\s*\%(0x\)\=\([[:xdigit:]]\{16}\)\s\%(0x\)\=\([[:xdigit:]]\{16}\%([[:xdigit:]]\{24}\)\=\)\s*\%(#.*\)\=$')
  if len(old_new)
    return [old_new[1], old_new[2]]
  endif
  let old = matchlist(a:line, '^\s*\%(0x\)\=\([[:xdigit:]]\{16}\)\s*\%(#.*\)\=$')
  if len(old)
    return [old[1], '']
  endif
  let comment = matchlist(a:line, '^\s*\%(#.*\)\=$')
  if len(comment)
    return ''
  else
    echohl ErrorMsg | echo 'Error parsing line ' . (a:index + 1) . ' of "' . s:replacekeys . '": ' a:line | echohl None
    return ''
  endif
endfunction

let g:GPGReplaceKeys = {}
let s:replacekeys = "/some/central/location/replacekeys.txt"
for s:line in filter(map(readfile(s:replacekeys), function('s:parse_replacekeys')), '!empty(v:val)')
  let g:GPGReplaceKeys[toupper(s:line[0])] = toupper(s:line[1])
endfor

Would you be interested to have this in 2.7? If yes, I could port it as soon as the 2.7/master branch works again for me.

@jamessan
Copy link
Owner

jamessan commented Jul 3, 2019

because master currently does not work for me

That's unfortunate. Would you be able to describe what's not working, either here or in a distinct issue?

Implement g:GPGReplaceKeys to automatically replace keys

That sounds like useful functionality. Thanks for the patch. I can look into integrating it.

@ThomasAH
Copy link
Contributor Author

ThomasAH commented Jul 4, 2019

because master currently does not work for me

That's unfortunate. Would you be able to describe what's not working, either here or in a distinct issue?

I reported one problem in #104. I don't remember exactly if I encountered more problems. I could try again when #104 is fixed.

@jamessan jamessan added this to the todo milestone May 10, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants