mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-11-26 06:12:06 +01:00
Add complex change-key-password test
This commit is contained in:
parent
e5539a810d
commit
6e9d276309
1 changed files with 78 additions and 0 deletions
|
@ -4,7 +4,85 @@
|
||||||
|
|
||||||
package sop.testsuite.pgpainless.operation;
|
package sop.testsuite.pgpainless.operation;
|
||||||
|
|
||||||
|
import org.bouncycastle.openpgp.PGPException;
|
||||||
|
import org.bouncycastle.openpgp.PGPPublicKey;
|
||||||
|
import org.bouncycastle.openpgp.PGPSecretKeyRing;
|
||||||
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
|
import org.junit.jupiter.params.provider.MethodSource;
|
||||||
|
import org.pgpainless.PGPainless;
|
||||||
|
import org.pgpainless.algorithm.KeyFlag;
|
||||||
|
import org.pgpainless.key.generation.KeySpec;
|
||||||
|
import org.pgpainless.key.generation.type.KeyType;
|
||||||
|
import org.pgpainless.key.generation.type.eddsa.EdDSACurve;
|
||||||
|
import org.pgpainless.key.generation.type.xdh.XDHSpec;
|
||||||
|
import org.pgpainless.util.Passphrase;
|
||||||
|
import sop.SOP;
|
||||||
|
import sop.testsuite.TestData;
|
||||||
import sop.testsuite.operation.ChangeKeyPasswordTest;
|
import sop.testsuite.operation.ChangeKeyPasswordTest;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.security.InvalidAlgorithmParameterException;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||||
|
|
||||||
public class PGPainlessChangeKeyPasswordTest extends ChangeKeyPasswordTest {
|
public class PGPainlessChangeKeyPasswordTest extends ChangeKeyPasswordTest {
|
||||||
|
|
||||||
|
@ParameterizedTest
|
||||||
|
@MethodSource("provideInstances")
|
||||||
|
public void changePasswordOfKeyWithSeparateSubkeyPasswords(SOP sop) throws IOException, PGPException, InvalidAlgorithmParameterException, NoSuchAlgorithmException {
|
||||||
|
PGPSecretKeyRing secretKeys = PGPainless.buildKeyRing()
|
||||||
|
.setPrimaryKey(KeySpec.getBuilder(KeyType.EDDSA(EdDSACurve._Ed25519), KeyFlag.CERTIFY_OTHER))
|
||||||
|
.addSubkey(KeySpec.getBuilder(KeyType.EDDSA(EdDSACurve._Ed25519), KeyFlag.SIGN_DATA))
|
||||||
|
.addSubkey(KeySpec.getBuilder(KeyType.XDH(XDHSpec._X25519), KeyFlag.ENCRYPT_COMMS, KeyFlag.ENCRYPT_STORAGE))
|
||||||
|
.build();
|
||||||
|
Iterator<PGPPublicKey> keys = secretKeys.getPublicKeys();
|
||||||
|
long primaryKeyId = keys.next().getKeyID();
|
||||||
|
long signingKeyId = keys.next().getKeyID();
|
||||||
|
long encryptKeyId = keys.next().getKeyID();
|
||||||
|
|
||||||
|
String p1 = "sw0rdf1sh";
|
||||||
|
String p2 = "0r4ng3";
|
||||||
|
String p3 = "dr4g0n";
|
||||||
|
|
||||||
|
secretKeys = PGPainless.modifyKeyRing(secretKeys)
|
||||||
|
.changeSubKeyPassphraseFromOldPassphrase(primaryKeyId, Passphrase.emptyPassphrase())
|
||||||
|
.withSecureDefaultSettings()
|
||||||
|
.toNewPassphrase(Passphrase.fromPassword(p1))
|
||||||
|
.changeSubKeyPassphraseFromOldPassphrase(signingKeyId, Passphrase.emptyPassphrase())
|
||||||
|
.withSecureDefaultSettings()
|
||||||
|
.toNewPassphrase(Passphrase.fromPassword(p2))
|
||||||
|
.changeSubKeyPassphraseFromOldPassphrase(encryptKeyId, Passphrase.emptyPassphrase())
|
||||||
|
.withSecureDefaultSettings()
|
||||||
|
.toNewPassphrase(Passphrase.fromPassword(p3))
|
||||||
|
.done();
|
||||||
|
|
||||||
|
String p4 = "m0nk3y";
|
||||||
|
|
||||||
|
byte[] keyWithNewPassword = sop.changeKeyPassword()
|
||||||
|
.oldKeyPassphrase(p1)
|
||||||
|
.oldKeyPassphrase(p2)
|
||||||
|
.oldKeyPassphrase(p3)
|
||||||
|
.newKeyPassphrase(p4)
|
||||||
|
.keys(secretKeys.getEncoded())
|
||||||
|
.getBytes();
|
||||||
|
byte[] cert = sop.extractCert().key(keyWithNewPassword).getBytes();
|
||||||
|
|
||||||
|
byte[] signedAndEncrypted = sop.encrypt()
|
||||||
|
.signWith(keyWithNewPassword)
|
||||||
|
.withKeyPassword(p4)
|
||||||
|
.withCert(cert)
|
||||||
|
.plaintext(TestData.PLAINTEXT.getBytes(StandardCharsets.UTF_8))
|
||||||
|
.getBytes();
|
||||||
|
byte[] plaintext = sop.decrypt()
|
||||||
|
.verifyWithCert(cert)
|
||||||
|
.withKey(keyWithNewPassword)
|
||||||
|
.withKeyPassword(p4)
|
||||||
|
.ciphertext(signedAndEncrypted)
|
||||||
|
.toByteArrayAndResult().getBytes();
|
||||||
|
|
||||||
|
assertArrayEquals(TestData.PLAINTEXT.getBytes(StandardCharsets.UTF_8), plaintext);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue