Skip to content

Commit fb176b7

Browse files
committed
Add FingerprintUtil.keyIdFromFingerprint()
1 parent 687b01c commit fb176b7

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

pg/src/main/java/org/bouncycastle/bcpg/FingerprintUtil.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,30 @@
66
public class FingerprintUtil
77
{
88

9+
/**
10+
* Derive a key-id from the given key fingerprint.
11+
* This method can derive key-ids from v4, v5 (LibrePGP) and v6 keys.
12+
* For keys with other versions (2,3) it will return 0.
13+
*
14+
* @param keyVersion version of the key
15+
* @param fingerprint fingerprint of the key
16+
* @return derived key-id
17+
*/
18+
public static long keyIdFromFingerprint(int keyVersion, byte[] fingerprint)
19+
{
20+
switch (keyVersion)
21+
{
22+
case PublicKeyPacket.VERSION_4:
23+
return keyIdFromV4Fingerprint(fingerprint);
24+
case 5:
25+
return keyIdFromLibrePgpFingerprint(fingerprint);
26+
case PublicKeyPacket.VERSION_6:
27+
return keyIdFromV6Fingerprint(fingerprint);
28+
default:
29+
return 0;
30+
}
31+
}
32+
933
/**
1034
* Derive a 64 bit key-id from a version 6 OpenPGP fingerprint.
1135
* For v6 keys, the key-id corresponds to the left-most 8 octets of the fingerprint.

pg/src/test/java/org/bouncycastle/bcpg/test/FingerprintUtilTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,19 @@ private void testLibrePgpKeyIdFromFingerprint()
4747
-3812177997909612905L, FingerprintUtil.keyIdFromLibrePgpFingerprint(decoded));
4848
}
4949

50+
private void testKeyIdFromFingerprint()
51+
{
52+
isEquals("v4 key-id from fingerprint mismatch",
53+
-5425419407118114754L, FingerprintUtil.keyIdFromFingerprint(
54+
4, Hex.decode("1D018C772DF8C5EF86A1DCC9B4B509CB5936E03E")));
55+
isEquals("v5 key-id from fingerprint mismatch",
56+
-3812177997909612905L, FingerprintUtil.keyIdFromFingerprint(
57+
5, Hex.decode("cb186c4f0609a697e4d52dfa6c722b0c1f1e27c18a56708f6525ec27bad9acc9")));
58+
isEquals("v6 key-id from fingerprint mismatch",
59+
-3812177997909612905L, FingerprintUtil.keyIdFromFingerprint(
60+
6, Hex.decode("cb186c4f0609a697e4d52dfa6c722b0c1f1e27c18a56708f6525ec27bad9acc9")));
61+
}
62+
5063
private void testLeftMostEqualsRightMostFor8Bytes()
5164
{
5265
byte[] bytes = new byte[] {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
@@ -95,6 +108,7 @@ public void performTest()
95108
testLibrePgpKeyIdFromFingerprint();
96109
testLeftMostEqualsRightMostFor8Bytes();
97110
testWriteKeyIdToBytes();
111+
testKeyIdFromFingerprint();
98112
}
99113

100114
public static void main(String[] args)

0 commit comments

Comments
 (0)