Skip to content

Commit 95e8063

Browse files
committed
Add PGPPublicKey.hasFingerprint method (reduce allocations)
1 parent 568466c commit 95e8063

File tree

18 files changed

+78
-44
lines changed

18 files changed

+78
-44
lines changed

pg/src/main/j2me/org/bouncycastle/openpgp/PGPPublicKey.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -337,11 +337,12 @@ public long getKeyID()
337337
*/
338338
public byte[] getFingerprint()
339339
{
340-
byte[] tmp = new byte[fingerprint.length];
341-
342-
System.arraycopy(fingerprint, 0, tmp, 0, tmp.length);
343-
344-
return tmp;
340+
return Arrays.clone(fingerprint);
341+
}
342+
343+
public boolean hasFingerprint(byte[] fingerprint)
344+
{
345+
return Arrays.areEqual(this.fingerprint, fingerprint);
345346
}
346347

347348
/**

pg/src/main/j2me/org/bouncycastle/openpgp/PGPPublicKeyRing.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.bouncycastle.bcpg.PublicKeyPacket;
1616
import org.bouncycastle.bcpg.TrustPacket;
1717
import org.bouncycastle.openpgp.operator.KeyFingerPrintCalculator;
18-
import org.bouncycastle.util.Arrays;
1918

2019
/**
2120
* Class to hold a single master public key and its subkeys.
@@ -135,7 +134,7 @@ public PGPPublicKey getPublicKey(byte[] fingerprint)
135134
{
136135
PGPPublicKey k = (PGPPublicKey)keys.get(i);
137136

138-
if (Arrays.areEqual(fingerprint, k.getFingerprint()))
137+
if (k.hasFingerprint(fingerprint))
139138
{
140139
return k;
141140
}

pg/src/main/j2me/org/bouncycastle/openpgp/PGPSecretKeyRing.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.bouncycastle.openpgp.operator.KeyFingerPrintCalculator;
2121
import org.bouncycastle.openpgp.operator.PBESecretKeyDecryptor;
2222
import org.bouncycastle.openpgp.operator.PBESecretKeyEncryptor;
23-
import org.bouncycastle.util.Arrays;
2423

2524
/**
2625
* Class to hold a single master secret key and its subkeys.
@@ -185,7 +184,7 @@ public PGPPublicKey getPublicKey(byte[] fingerprint)
185184
{
186185
PGPPublicKey k = (PGPPublicKey)keys.get(i);
187186

188-
if (Arrays.areEqual(fingerprint, k.getFingerprint()))
187+
if (k.hasFingerprint(fingerprint))
189188
{
190189
return k;
191190
}
@@ -262,7 +261,7 @@ public PGPSecretKey getSecretKey(byte[] fingerprint)
262261
{
263262
PGPSecretKey k = (PGPSecretKey)keys.get(i);
264263

265-
if (Arrays.areEqual(fingerprint, k.getPublicKey().getFingerprint()))
264+
if (k.getPublicKey().hasFingerprint(fingerprint))
266265
{
267266
return k;
268267
}

pg/src/main/java/org/bouncycastle/openpgp/PGPPublicKey.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -415,11 +415,12 @@ public long getKeyID()
415415
*/
416416
public byte[] getFingerprint()
417417
{
418-
byte[] tmp = new byte[fingerprint.length];
419-
420-
System.arraycopy(fingerprint, 0, tmp, 0, tmp.length);
418+
return Arrays.clone(fingerprint);
419+
}
421420

422-
return tmp;
421+
public boolean hasFingerprint(byte[] fingerprint)
422+
{
423+
return Arrays.areEqual(this.fingerprint, fingerprint);
423424
}
424425

425426
/**

pg/src/main/java/org/bouncycastle/openpgp/PGPPublicKeyRing.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.bouncycastle.bcpg.TrustPacket;
2424
import org.bouncycastle.bcpg.UserDataPacket;
2525
import org.bouncycastle.openpgp.operator.KeyFingerPrintCalculator;
26-
import org.bouncycastle.util.Arrays;
2726
import org.bouncycastle.util.Iterable;
2827
import org.bouncycastle.util.Longs;
2928

@@ -184,7 +183,7 @@ public PGPPublicKey getPublicKey(byte[] fingerprint)
184183
{
185184
PGPPublicKey k = (PGPPublicKey)keys.get(i);
186185

187-
if (Arrays.areEqual(fingerprint, k.getFingerprint()))
186+
if (k.hasFingerprint(fingerprint))
188187
{
189188
return k;
190189
}
@@ -478,7 +477,7 @@ public static PGPPublicKeyRing join(
478477
boolean allowSubkeySigsOnNonSubkey)
479478
throws PGPException
480479
{
481-
if (!Arrays.areEqual(first.getPublicKey().getFingerprint(), second.getPublicKey().getFingerprint()))
480+
if (!second.getPublicKey().hasFingerprint(first.getPublicKey().getFingerprint()))
482481
{
483482
throw new IllegalArgumentException("Cannot merge certificates with differing primary keys.");
484483
}

pg/src/main/java/org/bouncycastle/openpgp/PGPPublicKeyRingCollection.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ public PGPPublicKey getPublicKey(
278278
}
279279

280280
/**
281-
* Return the PGP public key associated with the given key fingerprint.
281+
* Return the public key ring which contains the key associated with the given key fingerprint.
282282
*
283283
* @param fingerprint the public key fingerprint to match against.
284284
* @return the PGP public key ring containing the PGP public key matching fingerprint.

pg/src/main/java/org/bouncycastle/openpgp/PGPSecretKeyRing.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.bouncycastle.openpgp.operator.KeyFingerPrintCalculator;
2525
import org.bouncycastle.openpgp.operator.PBESecretKeyDecryptor;
2626
import org.bouncycastle.openpgp.operator.PBESecretKeyEncryptor;
27-
import org.bouncycastle.util.Arrays;
2827
import org.bouncycastle.util.Iterable;
2928

3029
/**
@@ -246,7 +245,7 @@ public PGPPublicKey getPublicKey(byte[] fingerprint)
246245
{
247246
PGPPublicKey k = (PGPPublicKey)extraPubKeys.get(i);
248247

249-
if (Arrays.areEqual(fingerprint, k.getFingerprint()))
248+
if (k.hasFingerprint(fingerprint))
250249
{
251250
return k;
252251
}
@@ -356,7 +355,7 @@ public PGPSecretKey getSecretKey(byte[] fingerprint)
356355
{
357356
PGPSecretKey k = (PGPSecretKey)keys.get(i);
358357

359-
if (Arrays.areEqual(fingerprint, k.getPublicKey().getFingerprint()))
358+
if (k.getPublicKey().hasFingerprint(fingerprint))
360359
{
361360
return k;
362361
}

pg/src/main/jdk1.3/org/bouncycastle/openpgp/PGPPublicKeyRing.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.bouncycastle.bcpg.TrustPacket;
2424
import org.bouncycastle.bcpg.UserDataPacket;
2525
import org.bouncycastle.openpgp.operator.KeyFingerPrintCalculator;
26-
import org.bouncycastle.util.Arrays;
2726
import org.bouncycastle.util.Iterable;
2827
import org.bouncycastle.util.Longs;
2928

@@ -184,7 +183,7 @@ public PGPPublicKey getPublicKey(byte[] fingerprint)
184183
{
185184
PGPPublicKey k = (PGPPublicKey)keys.get(i);
186185

187-
if (Arrays.areEqual(fingerprint, k.getFingerprint()))
186+
if (k.hasFingerprint(fingerprint))
188187
{
189188
return k;
190189
}
@@ -468,7 +467,7 @@ public static PGPPublicKeyRing join(
468467
boolean allowSubkeySigsOnNonSubkey)
469468
throws PGPException
470469
{
471-
if (!Arrays.areEqual(first.getPublicKey().getFingerprint(), second.getPublicKey().getFingerprint()))
470+
if (!second.getPublicKey().hasFingerprint(first.getPublicKey().getFingerprint()))
472471
{
473472
throw new IllegalArgumentException("Cannot merge certificates with differing primary keys.");
474473
}

pg/src/main/jdk1.3/org/bouncycastle/openpgp/PGPSecretKeyRing.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.bouncycastle.openpgp.operator.KeyFingerPrintCalculator;
2525
import org.bouncycastle.openpgp.operator.PBESecretKeyDecryptor;
2626
import org.bouncycastle.openpgp.operator.PBESecretKeyEncryptor;
27-
import org.bouncycastle.util.Arrays;
2827
import org.bouncycastle.util.Iterable;
2928

3029
/**
@@ -246,7 +245,7 @@ public PGPPublicKey getPublicKey(byte[] fingerprint)
246245
{
247246
PGPPublicKey k = (PGPPublicKey)extraPubKeys.get(i);
248247

249-
if (Arrays.areEqual(fingerprint, k.getFingerprint()))
248+
if (k.hasFingerprint(fingerprint))
250249
{
251250
return k;
252251
}
@@ -356,7 +355,7 @@ public PGPSecretKey getSecretKey(byte[] fingerprint)
356355
{
357356
PGPSecretKey k = (PGPSecretKey)keys.get(i);
358357

359-
if (Arrays.areEqual(fingerprint, k.getPublicKey().getFingerprint()))
358+
if (k.getPublicKey().hasFingerprint(fingerprint))
360359
{
361360
return k;
362361
}

pg/src/test/j2me/org/bouncycastle/openpgp/test/BcPGPRSATest.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,12 @@ private void fingerPrintTest()
406406

407407
PGPPublicKey pubKey = pgpPub.getPublicKey();
408408

409-
if (!areEqual(pubKey.getFingerprint(), Hex.decode("4FFB9F0884266C715D1CEAC804A3BBFA")))
409+
byte[] expectedVersion3 = Hex.decode("4FFB9F0884266C715D1CEAC804A3BBFA");
410+
if (!areEqual(pubKey.getFingerprint(), expectedVersion3))
411+
{
412+
fail("version 3 fingerprint test failed");
413+
}
414+
if (!pubKey.hasFingerprint(expectedVersion3))
410415
{
411416
fail("version 3 fingerprint test failed");
412417
}
@@ -418,7 +423,12 @@ private void fingerPrintTest()
418423

419424
pubKey = pgpPub.getPublicKey();
420425

421-
if (!areEqual(pubKey.getFingerprint(), Hex.decode("3062363c1046a01a751946bb35586146fdf3f373")))
426+
byte[] expectedVersion4 = Hex.decode("3062363c1046a01a751946bb35586146fdf3f373");
427+
if (!areEqual(pubKey.getFingerprint(), expectedVersion4))
428+
{
429+
fail("version 4 fingerprint test failed");
430+
}
431+
if (!pubKey.hasFingerprint(expectedVersion4))
422432
{
423433
fail("version 4 fingerprint test failed");
424434
}

0 commit comments

Comments
 (0)