001// SPDX-FileCopyrightText: 2018 Paul Schaub <vanitasvitae@fsfe.org> 002// 003// SPDX-License-Identifier: Apache-2.0 004 005package org.pgpainless.util.selection.keyring; 006 007import javax.annotation.Nonnull; 008import java.util.HashSet; 009import java.util.Iterator; 010import java.util.Set; 011 012import org.bouncycastle.openpgp.PGPSecretKeyRing; 013import org.bouncycastle.openpgp.PGPSecretKeyRingCollection; 014import org.pgpainless.util.MultiMap; 015 016public abstract class SecretKeyRingSelectionStrategy<O> implements KeyRingSelectionStrategy<PGPSecretKeyRing, PGPSecretKeyRingCollection, O> { 017 @Override 018 public Set<PGPSecretKeyRing> selectKeyRingsFromCollection(O identifier, @Nonnull PGPSecretKeyRingCollection keyRingCollection) { 019 Set<PGPSecretKeyRing> accepted = new HashSet<>(); 020 for (Iterator<PGPSecretKeyRing> i = keyRingCollection.getKeyRings(); i.hasNext(); ) { 021 PGPSecretKeyRing ring = i.next(); 022 if (accept(identifier, ring)) accepted.add(ring); 023 } 024 return accepted; 025 } 026 027 @Override 028 public MultiMap<O, PGPSecretKeyRing> selectKeyRingsFromCollections(@Nonnull MultiMap<O, PGPSecretKeyRingCollection> keyRingCollections) { 029 MultiMap<O, PGPSecretKeyRing> keyRings = new MultiMap<>(); 030 for (O identifier : keyRingCollections.keySet()) { 031 for (PGPSecretKeyRingCollection collection : keyRingCollections.get(identifier)) { 032 keyRings.put(identifier, selectKeyRingsFromCollection(identifier, collection)); 033 } 034 } 035 return keyRings; 036 } 037}