mirror of
https://github.com/pgpainless/pgpainless.git
synced 2025-12-05 03:41:07 +01:00
Add test for stripped key subkey passphrase changing
This commit is contained in:
parent
a9cee6f45c
commit
51a1417f22
1 changed files with 68 additions and 0 deletions
|
|
@ -0,0 +1,68 @@
|
|||
// SPDX-FileCopyrightText: 2025 Alexander Grahn
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package org.pgpainless.example;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.bouncycastle.bcpg.KeyIdentifier;
|
||||
import org.bouncycastle.openpgp.PGPException;
|
||||
import org.bouncycastle.openpgp.api.OpenPGPKey;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.pgpainless.PGPainless;
|
||||
import org.pgpainless.exception.WrongPassphraseException;
|
||||
import org.pgpainless.key.protection.UnlockSecretKey;
|
||||
import org.pgpainless.util.Passphrase;
|
||||
|
||||
public class ModifyStrippedKeyTest {
|
||||
|
||||
private OpenPGPKey strippedKey;
|
||||
|
||||
/**
|
||||
* This example tries to change the passphrase of the encryption subkey in a "stripped" key to a new passphrase.
|
||||
* The key is stripped, as the primary secret key is diverted to a smart card.
|
||||
*/
|
||||
@Test
|
||||
public void changeEncryptionSubkeyPassphrase() throws PGPException, IOException {
|
||||
|
||||
String strippedKeyString =
|
||||
"-----BEGIN PGP PRIVATE KEY BLOCK-----\n\n" +
|
||||
"lDsEaNz9VhYJKwYBBAHaRw8BAQdANvkQp6G9vVPUtxHplmw44lclTAm2vSqREnfi\n" +
|
||||
"bsqmDDP/AGUAR05VAbQfQm9iIFVzZXIgPGJvYi51c2VyQGV4YW1wbGUub3JnPoiT\n" +
|
||||
"BBMWCgA7FiEE81kLNGDerGMA7okHMcFP0Qqg/SwFAmjc/VYCGwEFCwkIBwICIgIG\n" +
|
||||
"FQoJCAsCBBYCAwECHgcCF4AACgkQMcFP0Qqg/Szv3AEA5Q0S6UrHI6YC9IqCV86Z\n" +
|
||||
"xF7zegeUJiTGfbIMmp+7qk4BAIJBZyfpsutfdnLBmXMQmPPvdlfNZ0H781sm4vq4\n" +
|
||||
"1KkFnIsEaNz9pRIKKwYBBAGXVQEFAQEHQLilfhrcbzI6XI7a+HbOfqNj/9cwZk8s\n" +
|
||||
"O4H/4IMhY7ZZAwEIB/4HAwIpPDPOpRpcw//ZZTsMuT5ZRDGnSA+3i34NWnhv50ex\n" +
|
||||
"yf51MgrvY+E3NaE9ObFfvEJILF8kub206yaQRbHWPrj7fU1C+DKJ9AbDcXZmzu/U\n" +
|
||||
"iHgEGBYKACAWIQTzWQs0YN6sYwDuiQcxwU/RCqD9LAUCaNz9pQIbDAAKCRAxwU/R\n" +
|
||||
"CqD9LCNSAP9v7GminBOFV8XkMsL4T+0P0woGjTZxUrYKKVR98NhXswEAhDfkQh0n\n" +
|
||||
"IyhOyHwzLuoGJ31M7a1rtB44tcJNtnP6XQQ=\n" +
|
||||
"=jquc\n" +
|
||||
"-----END PGP PRIVATE KEY BLOCK-----\n";
|
||||
|
||||
PGPainless api = PGPainless.getInstance();
|
||||
|
||||
strippedKey = api.readKey().parseKey(strippedKeyString);
|
||||
|
||||
KeyIdentifier encryptionSubkeyId = strippedKey.getEncryptionKeys().get(0).getKeyIdentifier();
|
||||
|
||||
strippedKey = api.modify(strippedKey)
|
||||
// Here we change the passphrase of the encryption subkey
|
||||
.changeSubKeyPassphraseFromOldPassphrase(encryptionSubkeyId, Passphrase.fromPassword("12345678"))
|
||||
.withSecureDefaultSettings()
|
||||
.toNewPassphrase(Passphrase.fromPassword("asdfghjk"))
|
||||
.done();
|
||||
|
||||
// encryption key can now only be unlocked using the new passphrase
|
||||
assertThrows(WrongPassphraseException.class, () ->
|
||||
UnlockSecretKey.unlockSecretKey(
|
||||
strippedKey.getSecretKey(encryptionSubkeyId).getPGPSecretKey(), Passphrase.fromPassword("12345678")));
|
||||
UnlockSecretKey.unlockSecretKey(
|
||||
strippedKey.getSecretKey(encryptionSubkeyId).getPGPSecretKey(), Passphrase.fromPassword("asdfghjk"));
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue