diff --git a/pgpainless-core/src/main/java/org/pgpainless/key/protection/SecretKeyRingProtector.java b/pgpainless-core/src/main/java/org/pgpainless/key/protection/SecretKeyRingProtector.java index 83672913..4d27ed02 100644 --- a/pgpainless-core/src/main/java/org/pgpainless/key/protection/SecretKeyRingProtector.java +++ b/pgpainless-core/src/main/java/org/pgpainless/key/protection/SecretKeyRingProtector.java @@ -15,11 +15,15 @@ */ package org.pgpainless.key.protection; +import java.util.Map; import javax.annotation.Nullable; import org.bouncycastle.openpgp.PGPException; +import org.bouncycastle.openpgp.PGPSecretKey; +import org.bouncycastle.openpgp.PGPSecretKeyRing; import org.bouncycastle.openpgp.operator.PBESecretKeyDecryptor; import org.bouncycastle.openpgp.operator.PBESecretKeyEncryptor; +import org.pgpainless.util.Passphrase; public interface SecretKeyRingProtector { @@ -42,4 +46,19 @@ public interface SecretKeyRingProtector { */ @Nullable PBESecretKeyEncryptor getEncryptor(Long keyId) throws PGPException; + static SecretKeyRingProtector unlockAllKeysWith(Passphrase passphrase, PGPSecretKeyRing keys) { + return PasswordBasedSecretKeyRingProtector.forKey(keys, passphrase); + } + + static SecretKeyRingProtector unlockSingleKeyWith(Passphrase passphrase, PGPSecretKey key) { + return PasswordBasedSecretKeyRingProtector.forKey(key, passphrase); + } + + static SecretKeyRingProtector unprotectedKeys() { + return new UnprotectedKeysProtector(); + } + + static SecretKeyRingProtector fromPassphraseMap(Map passphraseMap) { + return new PassphraseMapKeyRingProtector(passphraseMap, KeyRingProtectionSettings.secureDefaultSettings(), null); + } }