jgit/org.eclipse.jgit.gpg.bc.test
Thomas Wolf 64cbea8a97 GPG: compute the keygrip to find a secret key
The gpg-agent stores secret keys in individual files in the secret
key directory private-keys-v1.d. The files have the key's keygrip
(in upper case) as name and extension ".key".

A keygrip is a SHA1 hash over the parameters of the public key. By
computing this keygrip, we can pre-compute the expected file name and
then check only that one file instead of having to iterate over all
keys stored in that directory.

This file naming scheme is actually an implementation detail of
gpg-agent. It is unlikely to change, though. The keygrip itself is
computed via libgcrypt and will remain stable according to the GPG
main author.[1]

Add an implementation for calculating the keygrip and include tests.
Do not iterate over files in BouncyCastleGpgKeyLocator but only check
the single file identified by the keygrip.

Ideally upstream BouncyCastle would provide such a getKeyGrip() method.
But as it re-builds GPG and libgcrypt internals, it's doubtful it would
be included there, and since BouncyCastle even lacks a number of curve
OIDs for ed25519/curve25519 and uses the short-Weierstrass parameters
instead of the more common Montgomery parameters, including it there
might be quite a bit of work.

[1] http://gnupg.10057.n7.nabble.com/GnuPG-2-1-x-and-2-2-x-keyring-formats-tp54146p54154.html

Bug: 547536
Change-Id: I30022a0e7b33b1bf35aec1222f84591f0c30ddfd
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
2021-02-16 00:37:01 +01:00
..
.settings Ignore missing javadoc tags in test bundles 2020-11-29 20:16:38 +01:00
META-INF GPG: compute the keygrip to find a secret key 2021-02-16 00:37:01 +01:00
tst/org/eclipse/jgit/gpg/bc/internal GPG: compute the keygrip to find a secret key 2021-02-16 00:37:01 +01:00
tst-rsrc/org/eclipse/jgit/gpg/bc/internal/keys GPG: compute the keygrip to find a secret key 2021-02-16 00:37:01 +01:00
.classpath GPG: compute the keygrip to find a secret key 2021-02-16 00:37:01 +01:00
.gitignore GPG: compute the keygrip to find a secret key 2021-02-16 00:37:01 +01:00
.project Decouple BouncyCastle from JGit Core 2020-06-01 01:26:22 +02:00
BUILD GPG: compute the keygrip to find a secret key 2021-02-16 00:37:01 +01:00
about.html Decouple BouncyCastle from JGit Core 2020-06-01 01:26:22 +02:00
build.properties GPG: compute the keygrip to find a secret key 2021-02-16 00:37:01 +01:00
plugin.properties Decouple BouncyCastle from JGit Core 2020-06-01 01:26:22 +02:00
pom.xml GPG: compute the keygrip to find a secret key 2021-02-16 00:37:01 +01:00