Skip to content

Instantly share code, notes, and snippets.

@gjedeer
Last active October 19, 2018 20:30
Show Gist options
  • Save gjedeer/4c23dc1a6987bd7bddaec8fdf3e92556 to your computer and use it in GitHub Desktop.
Save gjedeer/4c23dc1a6987bd7bddaec8fdf3e92556 to your computer and use it in GitHub Desktop.
BouncyCastle OpenPGP proper key selection for encryption
/* Given an ASCII armored key, returns a subkey that's suitable for encryption and, possibly, non-expired */
private PGPPublicKey getPublicKey() throws PGPException {
final String pgpKey = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\n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\n=kwFe\n-----END PGP PUBLIC KEY BLOCK-----\n";
try {
InputStream decoderStream = PGPUtil.getDecoderStream(
new ByteArrayInputStream(
pgpKey.getBytes()
)
);
PGPPublicKeyRingCollection pgpPub = new PGPPublicKeyRingCollection(decoderStream, new BcKeyFingerprintCalculator());
PGPPublicKey key = null;
PGPPublicKey possiblyExpiredKey = null;
Iterator<PGPPublicKeyRing> rIt = pgpPub.getKeyRings();
while (key == null && rIt.hasNext()) {
PGPPublicKeyRing kRing = rIt.next();
Iterator<PGPPublicKey> kIt = kRing.getPublicKeys();
while (key == null && kIt.hasNext()) {
PGPPublicKey k = kIt.next();
if (k.isEncryptionKey() && !k.isMasterKey() && !k.hasRevocation()) {
boolean keyUsageAllowsEncryption = false;
/* Check if key is marked as signing key or encryption key */
Iterator<PGPSignature> i = k.getSignatures();
while(i.hasNext()) {
PGPSignature signature = i.next();
int keyFlags = signature.getHashedSubPackets().getKeyFlags();
boolean isEncryptComms = (keyFlags & KeyFlags.ENCRYPT_COMMS) > 0;
boolean isEncryptStorage = (keyFlags & KeyFlags.ENCRYPT_STORAGE) > 0;
if (isEncryptComms || isEncryptStorage) {
keyUsageAllowsEncryption = true;
}
}
if(!keyUsageAllowsEncryption) continue;
possiblyExpiredKey = k;
long expirationDate = k.getCreationTime().getTime() + 1000 * k.getValidSeconds();
if (expirationDate > new Date().getTime()) {
key = k;
}
}
}
}
if (key == null && possiblyExpiredKey != null) {
Log.w(LOG_TAG, "Using expired key for encryption because nothing better has been found");
return possiblyExpiredKey;
}
if (key == null) {
throw new IllegalArgumentException("Can't find encryption key in key ring.");
}
return key;
} catch(IOException e) {
Log.e(LOG_TAG, "PGP key get failed", e);
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment