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); +}