From 4d1e5dc3619b075ac9f7cff8bf45d72f10922562 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Mon, 4 Jun 2018 19:44:03 +0200 Subject: [PATCH] Add KeyFilter class --- .../crypto/pgpainless/KeyFilter.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/main/java/de/vanitasvitae/crypto/pgpainless/KeyFilter.java diff --git a/src/main/java/de/vanitasvitae/crypto/pgpainless/KeyFilter.java b/src/main/java/de/vanitasvitae/crypto/pgpainless/KeyFilter.java new file mode 100644 index 00000000..3d1f104a --- /dev/null +++ b/src/main/java/de/vanitasvitae/crypto/pgpainless/KeyFilter.java @@ -0,0 +1,44 @@ +package de.vanitasvitae.crypto.pgpainless; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import org.bouncycastle.openpgp.PGPPublicKey; +import org.bouncycastle.openpgp.PGPPublicKeyRing; +import org.bouncycastle.openpgp.PGPPublicKeyRingCollection; + +public abstract class KeyFilter { + + public Set filter(Set initialIdSet, PGPPublicKeyRingCollection collection) { + Set rings = new HashSet<>(); + for (Iterator i = collection.getKeyRings(); i.hasNext();) { + rings.add(i.next()); + } + return filter(initialIdSet, rings, false); + } + + public Set filter(Set initialIdSet, Set rings, boolean boolToAvoidSameMethodErasure) { + Set keys = new HashSet<>(); + for (PGPPublicKeyRing ring : rings) { + for (Iterator i = ring.getPublicKeys(); i.hasNext();) { + keys.add(i.next()); + } + } + return filter(initialIdSet, keys); + } + + public Set filter(Set initialIdSet, Set keys) { + Set filteredIds = new HashSet<>(); + for (Long id : initialIdSet) { + for (PGPPublicKey key : keys) { + if (key.getKeyID() == id && filter(key)) { + filteredIds.add(id); + } + } + } + return filteredIds; + } + + public abstract boolean filter(PGPPublicKey key); +}