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}