mirror of
https://github.com/pgpainless/pgpainless.git
synced 2025-09-11 19:29:39 +02:00
Hide distinction between clearsigned and inline signed message verification
This commit is contained in:
parent
bd67d9c0fa
commit
59c9ec341e
9 changed files with 69 additions and 115 deletions
|
@ -25,9 +25,9 @@ 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.cleartext_signatures.CleartextSignatureProcessor;
|
||||
import org.pgpainless.decryption_verification.cleartext_signatures.InMemoryMultiPassStrategy;
|
||||
import org.pgpainless.decryption_verification.cleartext_signatures.MultiPassStrategy;
|
||||
import org.pgpainless.decryption_verification.cleartext_signatures.VerifyCleartextSignaturesImpl;
|
||||
import org.pgpainless.encryption_signing.EncryptionStream;
|
||||
import org.pgpainless.encryption_signing.ProducerOptions;
|
||||
import org.pgpainless.encryption_signing.SigningOptions;
|
||||
|
@ -79,12 +79,11 @@ public class CleartextSignatureVerificationTest {
|
|||
.addVerificationCert(signingKeys);
|
||||
|
||||
InMemoryMultiPassStrategy multiPassStrategy = MultiPassStrategy.keepMessageInMemory();
|
||||
CleartextSignatureProcessor processor = PGPainless.verifyCleartextSignedMessage()
|
||||
options.setMultiPassStrategy(multiPassStrategy);
|
||||
DecryptionStream decryptionStream = PGPainless.decryptAndOrVerify()
|
||||
.onInputStream(new ByteArrayInputStream(MESSAGE_SIGNED))
|
||||
.withStrategy(multiPassStrategy)
|
||||
.withOptions(options);
|
||||
|
||||
DecryptionStream decryptionStream = processor.getVerificationStream();
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
Streams.pipeAll(decryptionStream, out);
|
||||
decryptionStream.close();
|
||||
|
@ -107,13 +106,11 @@ public class CleartextSignatureVerificationTest {
|
|||
File tempDir = TestUtils.createTempDirectory();
|
||||
File file = new File(tempDir, "file");
|
||||
MultiPassStrategy multiPassStrategy = MultiPassStrategy.writeMessageToFile(file);
|
||||
CleartextSignatureProcessor processor = PGPainless.verifyCleartextSignedMessage()
|
||||
options.setMultiPassStrategy(multiPassStrategy);
|
||||
DecryptionStream decryptionStream = PGPainless.decryptAndOrVerify()
|
||||
.onInputStream(new ByteArrayInputStream(MESSAGE_SIGNED))
|
||||
.withStrategy(multiPassStrategy)
|
||||
.withOptions(options);
|
||||
|
||||
DecryptionStream decryptionStream = processor.getVerificationStream();
|
||||
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
Streams.pipeAll(decryptionStream, out);
|
||||
decryptionStream.close();
|
||||
|
@ -173,18 +170,6 @@ public class CleartextSignatureVerificationTest {
|
|||
assertEquals(1, metadata.getVerifiedSignatures().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void consumingCleartextSignedMessageWithNormalAPIThrowsWrongConsumingMethodException() throws IOException, PGPException {
|
||||
PGPPublicKeyRing certificate = TestKeys.getEmilPublicKeyRing();
|
||||
ConsumerOptions options = new ConsumerOptions()
|
||||
.addVerificationCert(certificate);
|
||||
|
||||
assertThrows(WrongConsumingMethodException.class, () ->
|
||||
PGPainless.decryptAndOrVerify()
|
||||
.onInputStream(new ByteArrayInputStream(MESSAGE_SIGNED))
|
||||
.withOptions(options));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void consumingInlineSignedMessageWithCleartextSignedVerificationApiThrowsWrongConsumingMethodException() throws PGPException, IOException {
|
||||
String inlineSignedMessage = "-----BEGIN PGP MESSAGE-----\n" +
|
||||
|
@ -207,11 +192,10 @@ public class CleartextSignatureVerificationTest {
|
|||
.addVerificationCert(certificate);
|
||||
|
||||
assertThrows(WrongConsumingMethodException.class, () ->
|
||||
PGPainless.verifyCleartextSignedMessage()
|
||||
.onInputStream(new ByteArrayInputStream(inlineSignedMessage.getBytes(StandardCharsets.UTF_8)))
|
||||
.withStrategy(new InMemoryMultiPassStrategy())
|
||||
.withOptions(options)
|
||||
.getVerificationStream());
|
||||
new VerifyCleartextSignaturesImpl()
|
||||
.onInputStream(new ByteArrayInputStream(inlineSignedMessage.getBytes(StandardCharsets.UTF_8)))
|
||||
.withOptions(options)
|
||||
.getVerificationStream());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -223,7 +207,7 @@ public class CleartextSignatureVerificationTest {
|
|||
ByteArrayOutputStream signedOut = new ByteArrayOutputStream();
|
||||
EncryptionStream signingStream = PGPainless.encryptAndOrSign().onOutputStream(signedOut)
|
||||
.withOptions(ProducerOptions.sign(SigningOptions.get()
|
||||
.addDetachedSignature(SecretKeyRingProtector.unprotectedKeys(), secretKey, DocumentSignatureType.CANONICAL_TEXT_DOCUMENT))
|
||||
.addDetachedSignature(SecretKeyRingProtector.unprotectedKeys(), secretKey, DocumentSignatureType.CANONICAL_TEXT_DOCUMENT))
|
||||
.setCleartextSigned());
|
||||
|
||||
Streams.pipeAll(msgIn, signingStream);
|
||||
|
@ -232,12 +216,10 @@ public class CleartextSignatureVerificationTest {
|
|||
String signed = signedOut.toString();
|
||||
|
||||
ByteArrayInputStream signedIn = new ByteArrayInputStream(signed.getBytes(StandardCharsets.UTF_8));
|
||||
DecryptionStream verificationStream = PGPainless.verifyCleartextSignedMessage()
|
||||
DecryptionStream verificationStream = PGPainless.decryptAndOrVerify()
|
||||
.onInputStream(signedIn)
|
||||
.withStrategy(new InMemoryMultiPassStrategy())
|
||||
.withOptions(new ConsumerOptions()
|
||||
.addVerificationCert(TestKeys.getEmilPublicKeyRing()))
|
||||
.getVerificationStream();
|
||||
.addVerificationCert(TestKeys.getEmilPublicKeyRing()));
|
||||
|
||||
ByteArrayOutputStream msgOut = new ByteArrayOutputStream();
|
||||
Streams.pipeAll(verificationStream, msgOut);
|
||||
|
|
|
@ -7,7 +7,6 @@ package org.pgpainless.example;
|
|||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
@ -24,11 +23,9 @@ import org.pgpainless.algorithm.DocumentSignatureType;
|
|||
import org.pgpainless.decryption_verification.ConsumerOptions;
|
||||
import org.pgpainless.decryption_verification.DecryptionStream;
|
||||
import org.pgpainless.decryption_verification.OpenPgpMetadata;
|
||||
import org.pgpainless.decryption_verification.cleartext_signatures.InMemoryMultiPassStrategy;
|
||||
import org.pgpainless.encryption_signing.EncryptionStream;
|
||||
import org.pgpainless.encryption_signing.ProducerOptions;
|
||||
import org.pgpainless.encryption_signing.SigningOptions;
|
||||
import org.pgpainless.exception.WrongConsumingMethodException;
|
||||
import org.pgpainless.key.protection.SecretKeyRingProtector;
|
||||
|
||||
public class DecryptOrVerify {
|
||||
|
@ -97,22 +94,10 @@ public class DecryptOrVerify {
|
|||
for (String signed : new String[] {INBAND_SIGNED, CLEARTEXT_SIGNED}) {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
ByteArrayInputStream in = new ByteArrayInputStream(signed.getBytes(StandardCharsets.UTF_8));
|
||||
BufferedInputStream bufIn = new BufferedInputStream(in);
|
||||
bufIn.mark(512);
|
||||
DecryptionStream verificationStream;
|
||||
try {
|
||||
verificationStream = PGPainless.decryptAndOrVerify()
|
||||
.onInputStream(bufIn)
|
||||
.onInputStream(in)
|
||||
.withOptions(options);
|
||||
} catch (WrongConsumingMethodException e) {
|
||||
bufIn.reset();
|
||||
// Cleartext Signed Message
|
||||
verificationStream = PGPainless.verifyCleartextSignedMessage()
|
||||
.onInputStream(bufIn)
|
||||
.withStrategy(new InMemoryMultiPassStrategy())
|
||||
.withOptions(options)
|
||||
.getVerificationStream();
|
||||
}
|
||||
|
||||
Streams.pipeAll(verificationStream, out);
|
||||
verificationStream.close();
|
||||
|
@ -140,11 +125,9 @@ public class DecryptOrVerify {
|
|||
|
||||
ByteArrayInputStream signedIn = new ByteArrayInputStream(out.toByteArray());
|
||||
|
||||
DecryptionStream verificationStream = PGPainless.verifyCleartextSignedMessage()
|
||||
DecryptionStream verificationStream = PGPainless.decryptAndOrVerify()
|
||||
.onInputStream(signedIn)
|
||||
.withStrategy(new InMemoryMultiPassStrategy())
|
||||
.withOptions(new ConsumerOptions().addVerificationCert(certificate))
|
||||
.getVerificationStream();
|
||||
.withOptions(new ConsumerOptions().addVerificationCert(certificate));
|
||||
|
||||
ByteArrayOutputStream plain = new ByteArrayOutputStream();
|
||||
Streams.pipeAll(verificationStream, plain);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue