Muitas pessoas realmente não entendem o GPGME e provavelmente não ajuda que a documentação que existe seja basicamente o comentário de código escrito na época. No entanto, permitirá acesso programático completo ou quase completo a todo o pacote GNU Privacy Guard e também deve permitir o acesso a coisas como libassuan, gpg-agent e vários outros componentes. É por isso que, por padrão, também inclui a implementação S / MIME que quase ninguém fora de algumas empresas que exclamou em voz alta no final dos anos 90 usa.
Atualmente, o GPGME inclui algo como 500 funções separadas ou mais e definitivamente cobre praticamente tudo o que você faria com o GPG na linha de comando. No entanto, ele também contém algumas relíquias de opções de design anteriores que foram posteriormente determinadas como não sendo a direção certa. Por exemplo, esta é uma API com grandes pedaços de GTK 2. Obviamente, isso precisa ir (e será quando o tempo permitir). Outro problema que tem atualmente, talvez o maior obstáculo à adoção é que, quando alguém diz "API", a maioria dos codificadores não pensa imediatamente nos arquivos de cabeçalho C para compilar com seu próprio código para acessar a coisa; vamos ser sinceros, hoje em dia a maioria das pessoas pensa em algo que é RESTful ou pelo menos vamos interagir com dados em um formato JSON. O GPGME está tão longe disso quanto ele ' é possível obter. Observe que, embora seja possível fazê-lo funcionar bem com o JSON, ele nunca pode ser RESTful porque as chaves de edição não podem ser. Além disso, o gerenciamento de chaves pela Web está apenas pedindo problemas.
Também existem muitos recursos e aspectos não documentados, de maneira que mesmo as pessoas que trabalham com o software desde o início ainda podem ser surpreendidas por algumas coisas. Como, digamos, o formato XML para keyring de dados que tinha tudo, exceto um esquema formal (até que isso foi gerado alguns meses atrás).
Por outro lado, por todas as coisas boas que Mutt faz, também faz algumas coisas chocantes. Por exemplo, se o GPGME é usado ou não, não deve haver nenhuma razão para o Mutt armazenar em cache as senhas; em qualquer cenário, ele deve ser entregue ao GPG (com ou sem gpg-agent). Da mesma forma, ele deve respeitar os parâmetros de configuração no ~/.gnupg/gpg.conf
arquivo (e outros nesse diretório). Claro, definir um ID de chave alternativo para contas diferentes para alterar a maneira como os comandos são chamados ou até mesmo poder especificar arquivos de configuração alternativos ou diretórios inteiros (por exemplo,gpg --homedir ~/.gnupg-work/gpg.conf
) No entanto, no momento, Mutt perde tempo tentando resolver problemas que já foram resolvidos pelo programa com o qual interage, como senha ou gerenciamento de chaves, mas não permite o acesso aos recursos normais do GPG, muitos dos quais são fantásticos para o email como usar linhas de grupo para vários destinatários ou substituir a seleção de teclas para determinados destinatários (porque sempre há um cara que fica perdendo sua chave secreta ou esquece a senha e agora você tem 15 chaves públicas com o mesmo endereço que o UID e o comportamento padrão é escolher a primeira correspondência que provavelmente não está correta). O Emacs é um pouco melhor lá, mas mesmo assim ele não consegue entender o gpg.conf
arquivo, que normalmente responde automaticamente às coisas que deseja solicitar.
Agora, para algo um pouco mais útil e relacionado tangencialmente, o GPGME vem com outra coisa bacana e não documentada chamada gpgme-tool. É uma interface rudimentar para o GPGME, que será executada em um soquete UNIX (e, é claro, você pode usar o ncat ou algo assim para fazê-lo em uma porta de rede, se desejar). Embora não esteja documentado, é bastante autoexplicativo se você o executar e interagir com ele por um tempo e começar com o comando help. Como alternativa, isso funciona muito bem:
echo help | gpgme-tool > gpgme-tool-cheatsheet.txt
Felizmente, ele fará todo o básico (criptografar, descriptografar, assinar, verificar, alterar frases secretas, gerar chaves, listar chaves, listar chaves secretas, procurar chaves específicas ou selecioná-las, etc.). Se você deseja ver o formato XML "oculto", tente o seguinte:
echo "KEYLIST --secret-only" | gpgme-tool > secret-key-list.xml
Isso não exportará as chaves secretas, basta listá-las e dados sobre elas. Além disso, ele será exportado com algum cruft de formato de saída que precisará ser filtrado antes que algo realmente o reconheça como XML (exclua a linha superior, os dois primeiros caracteres de cada linha subseqüente e o% 0A do final de cada linha ) De qualquer forma, o gpgme-tool pode dar uma idéia melhor do que o GPGME pode realmente fazer. As ligações PyME Python para GPGME, por exemplo, tentam corresponder automaticamente as funções GPGME (e geralmente conseguem isso sem problemas); a lista atual de recursos em pyme.core.pygpgme chega a 534. Compare isso com a linha de comando e o GPG 1.4.20 tem 322 opções, enquanto o 2.1.11 tem 347 (pulei o 2.0, então não posso verificar, mas deveria estar em algum lugar entre os dois).
Quanto à resposta anterior, referente à correspondência dos comandos das teclas, isso deve ser conduzido exclusivamente pelas opções de configuração e se o Mutt "permite" o acesso total ao GPG ou não. Atualmente, estou usando o Mutt com GPGME e as duas funções mencionadas (chave de email e extrair chaves) estão bem, embora o Mutt tenha problemas para reconhecer o conteúdo PGP / in-line se tiver atribuído ou escolhido o tipo de texto / conteúdo simples em algum lugar. Quando isso acontece, então sim, geralmente é necessário mudar para o Emacs ou algo assim. Ainda assim, isso parece ser um problema com a maneira como o Mutt verifica se o conteúdo é realmente apenas texto ou como verifica o conteúdo no formato OpenPGP. Embora eu adorasse nada melhor do que dizer que todos devemos usar PGP / MIME (e deveríamos estar),
Basicamente, parece que o Mutt depende apenas da mensagem ser MIME de várias partes, com uma ou mais partes contendo a chave, assinaturas e / ou conteúdo criptografado para que ele possa fazer alguma coisa. Ele não apenas procura por e-mail simples procurando conteúdo que corresponda, mas isso não é culpa do GPG nem do GPGME. A solução é adicionar esses recursos ao Mutt ou abrir a mensagem em algo com esse recurso (por exemplo, Emacs com EPA / EasyPG, que deve ser ativado por padrão hoje em dia) ou canalizar a mensagem para um comando direto (ou gpgme-tool se você preferir, mas ao canalizar é geralmente mais fácil ir direto para um comando regular).
Quanto ao GPGME, nem todo mundo o tem disponível, pois sempre precisa ser compilado a partir da mesma versão de origem que está instalada no sistema. Se você atualizar o GPG e não recompilar o GPGME para corresponder, provavelmente haverá problemas. Por outro lado, a instalação do GPG a partir da fonte é geralmente recomendada sempre que possível; portanto, se seguir a rota GPGME, será uma boa prática executar essa recompilação ao atualizar o GPG e tudo ficará bem.
Considerando que as pessoas que dependem exclusivamente dos pacotes fornecidos pela distribuição escolhida também estarão sujeitas a tudo o que os mantenedores desses pacotes puderem se preocupar em manter e elas podem ou não entender sempre os requisitos do GPG e do GPGME trabalhando juntos. Por exemplo, o pacote MacPorts para GPGME está configurado para depender do GPG 2.0.x, que, por sua vez, está em conflito com o GPG 2.1.x; portanto, a maioria das pessoas que instalam o 2.1 também não pode instalar o GPGME, mesmo que claramente trabalhem juntas. Para que o GPGME funcione nesse cenário, é necessário fazer coisas contra as quais o MacPorts recomenda (compilar coisas fora do sistema de gerenciamento de portas, mas dentro /opt/local
). Algumas distribuições Linux podem ter problemas semelhantes.
Portanto, se você usar apenas PGP / MIME, não haverá problemas em usar a integração GPGME e isso significa que você nunca precisará configurar comandos específicos em seu .muttrc
arquivo. Se você lida com PGP / in-line, encontrará problemas, mas eles não podem ser evitados de qualquer maneira com o Mutt, então eu recomendo usar o GPGME, se puder.
AVISO LEGAL: Estou envolvido com o trabalho de desenvolvedor para criar uma API na API para que todos os desenvolvedores não-C possam usar a coisa após a revisão. Eu também portou o PyME 0.9 do Python 2 para o Python 3 (atualmente está em uma ramificação do GPGME e apenas a versão do Python 2 está disponível via PyPI e pip).
UPDATE: essa porta do PyME para o Python 3 agora está na ramificação principal do GPGME e está disponível no PyPI como pyme3.