mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-11-29 07:42:06 +01:00
Fix hen and egg problem with signature detaching in SOP
This commit is contained in:
parent
620959abc6
commit
722477673d
1 changed files with 26 additions and 18 deletions
|
@ -15,6 +15,8 @@
|
||||||
*/
|
*/
|
||||||
package org.pgpainless.sop;
|
package org.pgpainless.sop;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
@ -22,6 +24,7 @@ import java.io.OutputStream;
|
||||||
import org.bouncycastle.bcpg.ArmoredOutputStream;
|
import org.bouncycastle.bcpg.ArmoredOutputStream;
|
||||||
import org.bouncycastle.openpgp.PGPSignature;
|
import org.bouncycastle.openpgp.PGPSignature;
|
||||||
import org.bouncycastle.openpgp.PGPSignatureList;
|
import org.bouncycastle.openpgp.PGPSignatureList;
|
||||||
|
import org.bouncycastle.util.io.Streams;
|
||||||
import org.pgpainless.exception.WrongConsumingMethodException;
|
import org.pgpainless.exception.WrongConsumingMethodException;
|
||||||
import org.pgpainless.decryption_verification.cleartext_signatures.ClearsignedMessageUtil;
|
import org.pgpainless.decryption_verification.cleartext_signatures.ClearsignedMessageUtil;
|
||||||
import org.pgpainless.util.ArmoredOutputStreamFactory;
|
import org.pgpainless.util.ArmoredOutputStreamFactory;
|
||||||
|
@ -44,29 +47,34 @@ public class DetachInbandSignatureAndMessageImpl implements DetachInbandSignatur
|
||||||
public ReadyWithResult<Signatures> message(InputStream messageInputStream) {
|
public ReadyWithResult<Signatures> message(InputStream messageInputStream) {
|
||||||
|
|
||||||
return new ReadyWithResult<Signatures>() {
|
return new ReadyWithResult<Signatures>() {
|
||||||
|
|
||||||
|
private ByteArrayOutputStream sigOut = new ByteArrayOutputStream();
|
||||||
@Override
|
@Override
|
||||||
public Signatures writeTo(OutputStream messageOutputStream) throws SOPGPException.NoSignature {
|
public Signatures writeTo(OutputStream messageOutputStream) throws SOPGPException.NoSignature, IOException {
|
||||||
|
|
||||||
|
PGPSignatureList signatures = null;
|
||||||
|
try {
|
||||||
|
signatures = ClearsignedMessageUtil.detachSignaturesFromInbandClearsignedMessage(messageInputStream, messageOutputStream);
|
||||||
|
} catch (WrongConsumingMethodException e) {
|
||||||
|
throw new IOException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (armor) {
|
||||||
|
ArmoredOutputStream armorOut = ArmoredOutputStreamFactory.get(sigOut);
|
||||||
|
for (PGPSignature signature : signatures) {
|
||||||
|
signature.encode(armorOut);
|
||||||
|
}
|
||||||
|
armorOut.close();
|
||||||
|
} else {
|
||||||
|
for (PGPSignature signature : signatures) {
|
||||||
|
signature.encode(sigOut);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return new Signatures() {
|
return new Signatures() {
|
||||||
@Override
|
@Override
|
||||||
public void writeTo(OutputStream signatureOutputStream) throws IOException {
|
public void writeTo(OutputStream signatureOutputStream) throws IOException {
|
||||||
PGPSignatureList signatures = null;
|
Streams.pipeAll(new ByteArrayInputStream(sigOut.toByteArray()), signatureOutputStream);
|
||||||
try {
|
|
||||||
signatures = ClearsignedMessageUtil.detachSignaturesFromInbandClearsignedMessage(messageInputStream, messageOutputStream);
|
|
||||||
} catch (WrongConsumingMethodException e) {
|
|
||||||
throw new IOException(e);
|
|
||||||
}
|
|
||||||
if (armor) {
|
|
||||||
ArmoredOutputStream armorOut = ArmoredOutputStreamFactory.get(signatureOutputStream);
|
|
||||||
for (PGPSignature signature : signatures) {
|
|
||||||
signature.encode(armorOut);
|
|
||||||
}
|
|
||||||
armorOut.close();
|
|
||||||
} else {
|
|
||||||
for (PGPSignature signature : signatures) {
|
|
||||||
signature.encode(signatureOutputStream);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue