mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-06-17 09:04:50 +02:00
Move ArmorUtils to org.pgpainless.ascii_armor Move Armored*StreamFactory to org.pgpainless.ascii_armor Move CRCingArmoredInputStreamWrapper to org.pgpainless.ascii_armor Move SessionKey to org.pgpainless.s2k Move RevocationAttributes to org.pgpainless.key Move UserId to org.pgpainless.key Move Passphrase to org.pgpainless.s2k Move NotationRegistry to org.pgpainless.policy
55 lines
2.2 KiB
Java
55 lines
2.2 KiB
Java
// SPDX-FileCopyrightText: 2021 Paul Schaub <vanitasvitae@fsfe.org>
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package org.pgpainless.key.protection;
|
|
|
|
import org.bouncycastle.openpgp.PGPException;
|
|
import org.bouncycastle.openpgp.operator.PBESecretKeyDecryptor;
|
|
import org.bouncycastle.openpgp.operator.PBESecretKeyEncryptor;
|
|
import org.pgpainless.implementation.ImplementationFactory;
|
|
import org.pgpainless.key.protection.passphrase_provider.SecretKeyPassphraseProvider;
|
|
import org.pgpainless.s2k.Passphrase;
|
|
|
|
import javax.annotation.Nullable;
|
|
|
|
public class BaseSecretKeyRingProtector implements SecretKeyRingProtector {
|
|
|
|
private final SecretKeyPassphraseProvider passphraseProvider;
|
|
private final KeyRingProtectionSettings protectionSettings;
|
|
|
|
public BaseSecretKeyRingProtector(SecretKeyPassphraseProvider passphraseProvider) {
|
|
this(passphraseProvider, KeyRingProtectionSettings.secureDefaultSettings());
|
|
}
|
|
|
|
public BaseSecretKeyRingProtector(SecretKeyPassphraseProvider passphraseProvider, KeyRingProtectionSettings protectionSettings) {
|
|
this.passphraseProvider = passphraseProvider;
|
|
this.protectionSettings = protectionSettings;
|
|
}
|
|
|
|
@Override
|
|
public boolean hasPassphraseFor(Long keyId) {
|
|
return passphraseProvider.hasPassphrase(keyId);
|
|
}
|
|
|
|
@Override
|
|
@Nullable
|
|
public PBESecretKeyDecryptor getDecryptor(Long keyId) throws PGPException {
|
|
Passphrase passphrase = passphraseProvider.getPassphraseFor(keyId);
|
|
return passphrase == null || passphrase.isEmpty() ? null :
|
|
ImplementationFactory.getInstance().getPBESecretKeyDecryptor(passphrase);
|
|
}
|
|
|
|
@Override
|
|
@Nullable
|
|
public PBESecretKeyEncryptor getEncryptor(Long keyId) throws PGPException {
|
|
Passphrase passphrase = passphraseProvider.getPassphraseFor(keyId);
|
|
return passphrase == null || passphrase.isEmpty() ? null :
|
|
ImplementationFactory.getInstance().getPBESecretKeyEncryptor(
|
|
protectionSettings.getEncryptionAlgorithm(),
|
|
protectionSettings.getHashAlgorithm(),
|
|
protectionSettings.getS2kCount(),
|
|
passphrase);
|
|
}
|
|
}
|