001// SPDX-FileCopyrightText: 2020 Paul Schaub <vanitasvitae@fsfe.org> 002// 003// SPDX-License-Identifier: Apache-2.0 004 005package org.pgpainless.key.protection.passphrase_provider; 006 007import java.util.Map; 008import javax.annotation.Nullable; 009 010import org.pgpainless.util.Passphrase; 011 012/** 013 * Implementation of the {@link SecretKeyPassphraseProvider} that holds a map of different {@link Passphrase passphrases}. 014 * It will return the right passphrase depending on the key-id. 015 * 016 * Note: This provider might return null! 017 * TODO: Make this null-safe and throw an exception instead? 018 */ 019public class MapBasedPassphraseProvider implements SecretKeyPassphraseProvider { 020 021 private final Map<Long, Passphrase> map; 022 023 /** 024 * Create a new map based passphrase provider. 025 * 026 * @param passphraseMap map of key-ids and passphrases 027 */ 028 public MapBasedPassphraseProvider(Map<Long, Passphrase> passphraseMap) { 029 this.map = passphraseMap; 030 } 031 032 @Nullable 033 @Override 034 public Passphrase getPassphraseFor(Long keyId) { 035 return map.get(keyId); 036 } 037 038 @Override 039 public boolean hasPassphrase(Long keyId) { 040 return map.containsKey(keyId); 041 } 042}