1
0
Fork 0
mirror of https://github.com/pgpainless/pgpainless.git synced 2024-06-26 05:24:49 +02:00
pgpainless/pgpainless-core/src/test/java/org/pgpainless/key/protection/PassphraseProtectedKeyTest.java

71 lines
2.8 KiB
Java
Raw Normal View History

2021-10-07 15:48:52 +02:00
// SPDX-FileCopyrightText: 2020 Paul Schaub <vanitasvitae@fsfe.org>
//
// SPDX-License-Identifier: Apache-2.0
2020-01-14 22:11:01 +01:00
package org.pgpainless.key.protection;
2020-11-13 16:31:59 +01:00
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
2020-01-14 22:11:01 +01:00
import java.security.InvalidAlgorithmParameterException;
import java.security.NoSuchAlgorithmException;
import java.util.Iterator;
2020-01-14 22:11:01 +01:00
import javax.annotation.Nullable;
import org.bouncycastle.openpgp.PGPException;
import org.bouncycastle.openpgp.PGPPublicKey;
import org.bouncycastle.openpgp.PGPSecretKeyRing;
2020-11-13 16:31:59 +01:00
import org.junit.jupiter.api.Test;
import org.pgpainless.PGPainless;
2020-01-14 22:11:01 +01:00
import org.pgpainless.key.TestKeys;
2020-10-23 16:44:21 +02:00
import org.pgpainless.key.protection.passphrase_provider.SecretKeyPassphraseProvider;
import org.pgpainless.s2k.Passphrase;
2020-01-14 22:11:01 +01:00
public class PassphraseProtectedKeyTest {
/**
* Protector that holds only the password of cryptie.
*/
private final PasswordBasedSecretKeyRingProtector protector = new PasswordBasedSecretKeyRingProtector(
KeyRingProtectionSettings.secureDefaultSettings(),
2020-01-14 22:11:01 +01:00
new SecretKeyPassphraseProvider() {
@Nullable
@Override
public Passphrase getPassphraseFor(Long keyId) {
2020-12-27 01:56:18 +01:00
if (keyId.equals(TestKeys.CRYPTIE_KEY_ID)) {
2020-01-14 22:11:01 +01:00
return new Passphrase(TestKeys.CRYPTIE_PASSWORD.toCharArray());
} else {
return null;
}
}
@Override
public boolean hasPassphrase(Long keyId) {
return keyId.equals(TestKeys.CRYPTIE_KEY_ID);
}
2020-01-14 22:11:01 +01:00
});
@Test
public void testReturnsNonNullDecryptorEncryptorForPassword() throws PGPException {
assertNotNull(protector.getEncryptor(TestKeys.CRYPTIE_KEY_ID));
assertNotNull(protector.getDecryptor(TestKeys.CRYPTIE_KEY_ID));
}
@Test
public void testReturnsNullDecryptorEncryptorForNoPassword() throws PGPException {
assertNull(protector.getEncryptor(TestKeys.JULIET_KEY_ID));
assertNull(protector.getDecryptor(TestKeys.JULIET_KEY_ID));
}
@Test
public void testReturnsNonNullDecryptorForSubkeys() throws InvalidAlgorithmParameterException, NoSuchAlgorithmException, PGPException {
PGPSecretKeyRing secretKeys = PGPainless.generateKeyRing().modernKeyRing("alice", "passphrase");
SecretKeyRingProtector protector = PasswordBasedSecretKeyRingProtector.forKey(secretKeys, Passphrase.fromPassword("passphrase"));
for (Iterator<PGPPublicKey> it = secretKeys.getPublicKeys(); it.hasNext(); ) {
PGPPublicKey subkey = it.next();
assertNotNull(protector.getEncryptor(subkey.getKeyID()));
assertNotNull(protector.getDecryptor(subkey.getKeyID()));
}
}
2020-01-14 22:11:01 +01:00
}