Skip to content

Commit

Permalink
Add FingerprintUtil.keyIdFromFingerprint()
Browse files Browse the repository at this point in the history
  • Loading branch information
vanitasvitae committed Jul 17, 2024
1 parent 35305a9 commit 6ee29e1
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
24 changes: 24 additions & 0 deletions pg/src/main/java/org/bouncycastle/bcpg/FingerprintUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,30 @@
public class FingerprintUtil
{

/**
* Derive a key-id from the given key fingerprint.
* This method can derive key-ids from v4, v5 (LibrePGP) and v6 keys.
* For keys with other versions (2,3) it will return 0.
*
* @param keyVersion version of the key
* @param fingerprint fingerprint of the key
* @return derived key-id
*/
public static long keyIdFromFingerprint(int keyVersion, byte[] fingerprint)
{
switch (keyVersion)
{
case PublicKeyPacket.VERSION_4:
return keyIdFromV4Fingerprint(fingerprint);
case 5:
return keyIdFromLibrePgpFingerprint(fingerprint);
case PublicKeyPacket.VERSION_6:
return keyIdFromV6Fingerprint(fingerprint);
default:
return 0;
}
}

/**
* Derive a 64 bit key-id from a version 6 OpenPGP fingerprint.
* For v6 keys, the key-id corresponds to the left-most 8 octets of the fingerprint.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,19 @@ private void testLibrePgpKeyIdFromFingerprint()
-3812177997909612905L, FingerprintUtil.keyIdFromLibrePgpFingerprint(decoded));
}

private void testKeyIdFromFingerprint()
{
isEquals("v4 key-id from fingerprint mismatch",
-5425419407118114754L, FingerprintUtil.keyIdFromFingerprint(
4, Hex.decode("1D018C772DF8C5EF86A1DCC9B4B509CB5936E03E")));
isEquals("v5 key-id from fingerprint mismatch",
-3812177997909612905L, FingerprintUtil.keyIdFromFingerprint(
5, Hex.decode("cb186c4f0609a697e4d52dfa6c722b0c1f1e27c18a56708f6525ec27bad9acc9")));
isEquals("v6 key-id from fingerprint mismatch",
-3812177997909612905L, FingerprintUtil.keyIdFromFingerprint(
6, Hex.decode("cb186c4f0609a697e4d52dfa6c722b0c1f1e27c18a56708f6525ec27bad9acc9")));
}

private void testLeftMostEqualsRightMostFor8Bytes()
{
byte[] bytes = new byte[] {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
Expand Down Expand Up @@ -95,6 +108,7 @@ public void performTest()
testLibrePgpKeyIdFromFingerprint();
testLeftMostEqualsRightMostFor8Bytes();
testWriteKeyIdToBytes();
testKeyIdFromFingerprint();
}

public static void main(String[] args)
Expand Down

0 comments on commit 6ee29e1

Please sign in to comment.