From 1e6782166fd896c0dd41c702f31555ed2d0fc5d3 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 25 Jul 2025 14:27:16 +0200 Subject: [PATCH] Fix idempotent ASCII armor operations --- .../pgpainless/bouncycastle/sop/operation/BCArmor.java | 5 ++++- .../pgpainless/bouncycastle/sop/operation/BCDearmor.java | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/bc-sop-api/src/main/java/org/pgpainless/bouncycastle/sop/operation/BCArmor.java b/bc-sop-api/src/main/java/org/pgpainless/bouncycastle/sop/operation/BCArmor.java index 9ac8ba2..66f52a9 100644 --- a/bc-sop-api/src/main/java/org/pgpainless/bouncycastle/sop/operation/BCArmor.java +++ b/bc-sop-api/src/main/java/org/pgpainless/bouncycastle/sop/operation/BCArmor.java @@ -1,6 +1,8 @@ package org.pgpainless.bouncycastle.sop.operation; +import org.bouncycastle.bcpg.ArmoredInputStream; import org.bouncycastle.bcpg.ArmoredOutputStream; +import org.bouncycastle.openpgp.PGPUtil; import org.bouncycastle.openpgp.api.OpenPGPApi; import org.bouncycastle.util.io.Streams; import org.jetbrains.annotations.NotNull; @@ -26,10 +28,11 @@ public class BCArmor return new Ready() { @Override public void writeTo(@NotNull OutputStream outputStream) throws IOException { + InputStream decodeIn = PGPUtil.getDecoderStream(inputStream); ArmoredOutputStream aOut = ArmoredOutputStream.builder() .clearHeaders() .build(outputStream); - Streams.pipeAll(inputStream, aOut); + Streams.pipeAll(decodeIn, aOut); aOut.close(); } }; diff --git a/bc-sop-api/src/main/java/org/pgpainless/bouncycastle/sop/operation/BCDearmor.java b/bc-sop-api/src/main/java/org/pgpainless/bouncycastle/sop/operation/BCDearmor.java index 8bfda06..f4c94fc 100644 --- a/bc-sop-api/src/main/java/org/pgpainless/bouncycastle/sop/operation/BCDearmor.java +++ b/bc-sop-api/src/main/java/org/pgpainless/bouncycastle/sop/operation/BCDearmor.java @@ -1,6 +1,6 @@ package org.pgpainless.bouncycastle.sop.operation; -import org.bouncycastle.bcpg.ArmoredInputStream; +import org.bouncycastle.openpgp.PGPUtil; import org.bouncycastle.openpgp.api.OpenPGPApi; import org.bouncycastle.util.io.Streams; import org.jetbrains.annotations.NotNull; @@ -26,9 +26,9 @@ public class BCDearmor return new Ready() { @Override public void writeTo(@NotNull OutputStream outputStream) throws IOException { - ArmoredInputStream aIn = new ArmoredInputStream(inputStream); - Streams.pipeAll(aIn, outputStream); - aIn.close(); + InputStream decodeIn = PGPUtil.getDecoderStream(inputStream); + Streams.pipeAll(decodeIn, outputStream); + decodeIn.close(); } }; }