From 2d76cb5c82c01d90fec7ee10533a0f14ad9406c0 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Wed, 4 Aug 2021 16:02:35 +0200 Subject: [PATCH] Fix partial length encoding of some messages Fixes #160 I'm not yet sure, why this issue only happened with some keys and not others, but this fix works for now. --- .../encryption_signing/EncryptionStream.java | 5 +- .../InvestigateThunderbirdDecryption.java | 137 ++++++++++++++++++ 2 files changed, 141 insertions(+), 1 deletion(-) diff --git a/pgpainless-core/src/main/java/org/pgpainless/encryption_signing/EncryptionStream.java b/pgpainless-core/src/main/java/org/pgpainless/encryption_signing/EncryptionStream.java index ea9d72e7..87d2d0a5 100644 --- a/pgpainless-core/src/main/java/org/pgpainless/encryption_signing/EncryptionStream.java +++ b/pgpainless-core/src/main/java/org/pgpainless/encryption_signing/EncryptionStream.java @@ -52,7 +52,10 @@ public final class EncryptionStream extends OutputStream { private final EncryptionResult.Builder resultBuilder = EncryptionResult.builder(); private boolean closed = false; - private static final int BUFFER_SIZE = 1 << 8; + // 1 << 8 causes wrong partial body length encoding + // 1 << 9 fixes this. + // see https://github.com/pgpainless/pgpainless/issues/160 + private static final int BUFFER_SIZE = 1 << 9; OutputStream outermostStream; private ArmoredOutputStream armorOutputStream = null; diff --git a/pgpainless-core/src/test/java/investigations/InvestigateThunderbirdDecryption.java b/pgpainless-core/src/test/java/investigations/InvestigateThunderbirdDecryption.java index 8b79a937..aac6513d 100644 --- a/pgpainless-core/src/test/java/investigations/InvestigateThunderbirdDecryption.java +++ b/pgpainless-core/src/test/java/investigations/InvestigateThunderbirdDecryption.java @@ -28,6 +28,8 @@ import org.bouncycastle.util.io.Streams; import org.junit.jupiter.api.Test; import org.pgpainless.PGPainless; import org.pgpainless.algorithm.DocumentSignatureType; +import org.pgpainless.decryption_verification.ConsumerOptions; +import org.pgpainless.decryption_verification.DecryptionStream; import org.pgpainless.encryption_signing.EncryptionOptions; import org.pgpainless.encryption_signing.EncryptionStream; import org.pgpainless.encryption_signing.ProducerOptions; @@ -128,4 +130,139 @@ public class InvestigateThunderbirdDecryption { System.out.println(out); // CHECKSTYLE:ON } + + @Test + public void testWithSuspiciousKey() throws PGPException, IOException { + String KEY = "-----BEGIN PGP PRIVATE KEY BLOCK-----\n" + + "Comment: 4409 A346 1359 96C9 4595 510E 5A18 53D1 5656 CB7A\n" + + "Comment: Alice (Created with pgpkeygen.com)