1
0
Fork 0
mirror of https://github.com/pgpainless/pgpainless.git synced 2024-12-23 11:27:57 +01:00

Retry key generation on invalid private key encoding length

Workaround for #70
This commit is contained in:
Paul Schaub 2021-02-15 23:37:03 +01:00
parent f2f7305fec
commit d2202dcb0f
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311

View file

@ -27,6 +27,8 @@ import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Nonnull;
import org.bouncycastle.openpgp.PGPException;
@ -60,6 +62,8 @@ import org.pgpainless.util.SignatureSubpacketGeneratorUtil;
public class KeyRingBuilder implements KeyRingBuilderInterface {
private static final Logger LOGGER = Logger.getLogger(KeyRingBuilder.class.getName());
private final Charset UTF8 = Charset.forName("UTF-8");
private final List<KeySpec> keySpecs = new ArrayList<>();
@ -454,8 +458,15 @@ public class KeyRingBuilder implements KeyRingBuilderInterface {
KeyPair keyPair = certKeyGenerator.generateKeyPair();
// Form PGP key pair
PGPKeyPair pgpKeyPair = ImplementationFactory.getInstance().getPGPKeyPair(type.getAlgorithm(), keyPair, new Date());
PGPKeyPair pgpKeyPair;
try {
pgpKeyPair = ImplementationFactory.getInstance().getPGPKeyPair(type.getAlgorithm(), keyPair, new Date());
} catch (PGPException e) {
// When generating EdDSA keys, the private key has an encoding length of 33 instead of 34, which results
// in an exception. Therefore we just try again as a workaround.
LOGGER.log(Level.INFO, "Private key has wrong length. Try again.", e);
pgpKeyPair = generateKeyPair(spec);
}
return pgpKeyPair;
}
}