001// SPDX-FileCopyrightText: 2018 Paul Schaub <vanitasvitae@fsfe.org> 002// 003// SPDX-License-Identifier: Apache-2.0 004 005package org.pgpainless.util.selection.keyring.impl; 006 007import java.util.Map; 008import java.util.Set; 009 010import org.bouncycastle.openpgp.PGPPublicKeyRing; 011import org.bouncycastle.openpgp.PGPSecretKeyRing; 012import org.pgpainless.util.selection.keyring.PublicKeyRingSelectionStrategy; 013import org.pgpainless.util.selection.keyring.SecretKeyRingSelectionStrategy; 014import org.pgpainless.util.MultiMap; 015 016public final class Whitelist { 017 018 private Whitelist() { 019 020 } 021 022 public static class PubRingSelectionStrategy<O> extends PublicKeyRingSelectionStrategy<O> { 023 024 private final MultiMap<O, Long> whitelist; 025 026 public PubRingSelectionStrategy(MultiMap<O, Long> whitelist) { 027 this.whitelist = whitelist; 028 } 029 030 public PubRingSelectionStrategy(Map<O, Set<Long>> whitelist) { 031 this(new MultiMap<>(whitelist)); 032 } 033 034 @Override 035 public boolean accept(O identifier, PGPPublicKeyRing keyRing) { 036 Set<Long> whitelistedKeyIds = whitelist.get(identifier); 037 038 if (whitelistedKeyIds == null) { 039 return false; 040 } 041 042 return whitelistedKeyIds.contains(keyRing.getPublicKey().getKeyID()); 043 } 044 } 045 046 public static class SecRingSelectionStrategy<O> extends SecretKeyRingSelectionStrategy<O> { 047 048 private final MultiMap<O, Long> whitelist; 049 050 public SecRingSelectionStrategy(MultiMap<O, Long> whitelist) { 051 this.whitelist = whitelist; 052 } 053 054 public SecRingSelectionStrategy(Map<O, Set<Long>> whitelist) { 055 this(new MultiMap<>(whitelist)); 056 } 057 058 @Override 059 public boolean accept(O identifier, PGPSecretKeyRing keyRing) { 060 Set<Long> whitelistedKeyIds = whitelist.get(identifier); 061 062 if (whitelistedKeyIds == null) { 063 return false; 064 } 065 066 return whitelistedKeyIds.contains(keyRing.getPublicKey().getKeyID()); 067 } 068 069 } 070}