diff --git a/.gitignore b/.gitignore index 0a0ff0f1..96a5578d 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,5 @@ pgpainless-core/.settings/ push_html.sh node_modules + +*/.cifuzz-corpus/* diff --git a/REUSE.toml b/REUSE.toml index 66b5e867..42e7dc3e 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -111,6 +111,12 @@ precedence = "aggregate" SPDX-FileCopyrightText = "2022 Paul Schaub " SPDX-License-Identifier = "Apache-2.0" +[[annotations]] +path = "pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/**" +precedence = "aggregate" +SPDX-FileCopyrightText = "2025 Paul Schaub " +SPDX-License-Identifier = "CC0-1.0" + [[annotations]] path = ".github/ISSUE_TEMPLATE/**" precedence = "aggregate" diff --git a/pgpainless-core/build.gradle b/pgpainless-core/build.gradle index 64d538d5..dd88b694 100644 --- a/pgpainless-core/build.gradle +++ b/pgpainless-core/build.gradle @@ -12,6 +12,9 @@ dependencies { testImplementation "org.junit.jupiter:junit-jupiter-params:$junitVersion" testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion" + // Jazzer for Fuzzing + testImplementation "com.code-intelligence:jazzer-junit:$jazzerVersion" + // Mocking Components testImplementation "org.mockito:mockito-core:$mockitoVersion" diff --git a/pgpainless-core/src/main/java/org/pgpainless/decryption_verification/OpenPgpInputStream.java b/pgpainless-core/src/main/java/org/pgpainless/decryption_verification/OpenPgpInputStream.java index 3522f509..9e431302 100644 --- a/pgpainless-core/src/main/java/org/pgpainless/decryption_verification/OpenPgpInputStream.java +++ b/pgpainless-core/src/main/java/org/pgpainless/decryption_verification/OpenPgpInputStream.java @@ -81,7 +81,7 @@ public class OpenPgpInputStream extends BufferedInputStream { this(in, true); } - private void inspectBuffer() throws IOException { + public void inspectBuffer() throws IOException { if (checkForAsciiArmor()) { return; } diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/decryption_verification/OpenPgpMessageInputStream.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/decryption_verification/OpenPgpMessageInputStream.kt index bd24b245..9112273e 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/decryption_verification/OpenPgpMessageInputStream.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/decryption_verification/OpenPgpMessageInputStream.kt @@ -139,7 +139,11 @@ class OpenPgpMessageInputStream( // Comsume packets, potentially stepping into nested layers layer@ while (run { - packet = pIn.nextPacketTag() + packet = try { + pIn.nextPacketTag() + } catch (e: NoSuchElementException) { + throw MalformedOpenPgpMessageException(e.message) + } packet } != null) { @@ -206,12 +210,25 @@ class OpenPgpMessageInputStream( syntaxVerifier.next(InputSymbol.LITERAL_DATA) val literalData = packetInputStream!!.readLiteralData() + val streamEncoding = try { + StreamEncoding.requireFromCode(literalData.format) + } catch (e: NoSuchElementException) { + throw PGPException("Invalid stream encoding format encountered: ${literalData.format}; ${e.message}") + } + + val fileName = try { + literalData.fileName + } catch (e: IllegalArgumentException) { + // Non UTF8 + throw PGPException("Cannot decode literal data filename: ${e.message}") + } + // Extract Metadata layerMetadata.child = LiteralData( - literalData.fileName, + fileName, literalData.modificationTime, - StreamEncoding.requireFromCode(literalData.format)) + streamEncoding) nestedInputStream = literalData.inputStream } @@ -221,10 +238,16 @@ class OpenPgpMessageInputStream( signatures.enterNesting() val compressedData = packetInputStream!!.readCompressedData() + val compAlg = try { + CompressionAlgorithm.requireFromId(compressedData.algorithm) + } catch (e: NoSuchElementException) { + throw PGPException(e.message) + } + // Extract Metadata val compressionLayer = CompressedData( - CompressionAlgorithm.requireFromId(compressedData.algorithm), + compAlg, layerMetadata.depth + 1) LOGGER.debug( @@ -324,7 +347,7 @@ class OpenPgpMessageInputStream( "Symmetrically Encrypted Data Packet at depth ${layerMetadata.depth} encountered.") syntaxVerifier.next(InputSymbol.ENCRYPTED_DATA) val encDataList = packetInputStream!!.readEncryptedDataList() - if (!encDataList.isIntegrityProtected && !encDataList.get(0).isAEAD) { + if (!encDataList.isIntegrityProtected && !encDataList.isEmpty && !encDataList.get(0).isAEAD) { LOGGER.warn("Symmetrically Encrypted Data Packet is not integrity-protected.") if (!options.isIgnoreMDCErrors()) { throw MessageNotIntegrityProtectedException() @@ -546,7 +569,13 @@ class OpenPgpMessageInputStream( pkesk: PGPPublicKeyEncryptedData ): Boolean { try { - val decrypted = pkesk.getDataStream(decryptorFactory) + val decrypted = try { + pkesk.getDataStream(decryptorFactory) + } catch (e: ClassCastException) { + throw PGPException(e.message) + } catch (e: IllegalArgumentException) { + throw PGPException(e.message) + } val sessionKey = SessionKey(pkesk.getSessionKey(decryptorFactory)) throwIfUnacceptable(sessionKey.algorithm) diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/decryption_verification/TeeBCPGInputStream.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/decryption_verification/TeeBCPGInputStream.kt index a9b353ca..83b461a1 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/decryption_verification/TeeBCPGInputStream.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/decryption_verification/TeeBCPGInputStream.kt @@ -17,6 +17,7 @@ import org.bouncycastle.openpgp.PGPOnePassSignature import org.bouncycastle.openpgp.PGPPadding import org.bouncycastle.openpgp.PGPSignature import org.pgpainless.algorithm.OpenPgpPacket +import org.pgpainless.exception.MalformedOpenPgpMessageException /** * Since we need to update signatures with data from the underlying stream, this class is used to @@ -61,7 +62,12 @@ class TeeBCPGInputStream(inputStream: BCPGInputStream, outputStream: OutputStrea fun readEncryptedDataList(): PGPEncryptedDataList { delayedTee.squeeze() - return PGPEncryptedDataList(packetInputStream) + return try { + PGPEncryptedDataList(packetInputStream) + } catch (e: IllegalArgumentException) { + // Mismatched SKESK / SEIPD version + throw MalformedOpenPgpMessageException(e.message) + } } fun readOnePassSignature(): PGPOnePassSignature { diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/key/generation/KeyRingBuilder.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/key/generation/KeyRingBuilder.kt index 05adf7d9..aacfcceb 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/key/generation/KeyRingBuilder.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/key/generation/KeyRingBuilder.kt @@ -45,7 +45,7 @@ class KeyRingBuilder : KeyRingBuilderInterface { } override fun addUserId(userId: CharSequence): KeyRingBuilder = apply { - userIds[userId.toString().trim()] = null + userIds[userId.toString()] = null } override fun addUserId(userId: ByteArray): KeyRingBuilder = diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/key/modification/secretkeyring/SecretKeyRingEditor.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/key/modification/secretkeyring/SecretKeyRingEditor.kt index ec93c6d6..5480442d 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/key/modification/secretkeyring/SecretKeyRingEditor.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/key/modification/secretkeyring/SecretKeyRingEditor.kt @@ -478,7 +478,7 @@ class SecretKeyRingEditor( val prevBinding = inspectKeyRing(secretKeyRing).getCurrentSubkeyBindingSignature(keyId) ?: throw NoSuchElementException( - "Previous subkey binding signaure for ${keyId.openPgpKeyId()} MUST NOT be null.") + "Previous subkey binding signature for ${keyId.openPgpKeyId()} MUST NOT be null.") val bindingSig = reissueSubkeyBindingSignature(subkey, expiration, protector, prevBinding) secretKeyRing = injectCertification(secretKeyRing, subkey, bindingSig) } @@ -569,9 +569,10 @@ class SecretKeyRingEditor( } private fun sanitizeUserId(userId: CharSequence): CharSequence = - // TODO: Further research how to sanitize user IDs. - // e.g. what about newlines? - userId.toString().trim() + // I'm not sure, what kind of sanitization is needed. + // Newlines are allowed, they just need to be escaped when emitted in an ASCII armor header + // Trailing/Leading whitespace is also fine. + userId.toString() private fun callbackFromRevocationAttributes(attributes: RevocationAttributes?) = object : RevocationSignatureSubpackets.Callback { diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/signature/SignatureUtils.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/signature/SignatureUtils.kt index 770dfc56..6e1329fb 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/signature/SignatureUtils.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/signature/SignatureUtils.kt @@ -8,6 +8,7 @@ import java.io.IOException import java.io.InputStream import java.util.* import openpgp.plusSeconds +import org.bouncycastle.bcpg.UnsupportedPacketVersionException import org.bouncycastle.bcpg.sig.KeyExpirationTime import org.bouncycastle.openpgp.* import org.bouncycastle.util.encoders.Hex @@ -151,37 +152,46 @@ class SignatureUtils { */ @JvmStatic fun readSignatures(inputStream: InputStream, maxIterations: Int): List { - val signatures = mutableListOf() - val pgpIn = ArmorUtils.getDecoderStream(inputStream) - val objectFactory = ImplementationFactory.getInstance().getPGPObjectFactory(pgpIn) + try { + val signatures = mutableListOf() + val pgpIn = ArmorUtils.getDecoderStream(inputStream) + val objectFactory = ImplementationFactory.getInstance().getPGPObjectFactory(pgpIn) - var i = 0 - var nextObject: Any? = null - while (i++ < maxIterations && - objectFactory.nextObject().also { nextObject = it } != null) { - // Since signatures are indistinguishable from randomness, there is no point in - // having them compressed, - // except for an attacker who is trying to exploit flaws in the decompression - // algorithm. - // Therefore, we ignore compressed data packets without attempting decompression. - if (nextObject is PGPCompressedData) { - // getInputStream() does not do decompression, contrary to getDataStream(). - Streams.drain( - (nextObject as PGPCompressedData) - .inputStream) // Skip packet without decompressing + var i = 0 + var nextObject: Any? = null + while (i++ < maxIterations && + objectFactory.nextObject().also { nextObject = it } != null) { + // Since signatures are indistinguishable from randomness, there is no point in + // having them compressed, + // except for an attacker who is trying to exploit flaws in the decompression + // algorithm. + // Therefore, we ignore compressed data packets without attempting decompression. + if (nextObject is PGPCompressedData) { + // getInputStream() does not do decompression, contrary to getDataStream(). + Streams.drain( + (nextObject as PGPCompressedData) + .inputStream + ) // Skip packet without decompressing + } + + if (nextObject is PGPSignatureList) { + signatures.addAll(nextObject as PGPSignatureList) + } + + if (nextObject is PGPSignature) { + signatures.add(nextObject as PGPSignature) + } } - if (nextObject is PGPSignatureList) { - signatures.addAll(nextObject as PGPSignatureList) - } - - if (nextObject is PGPSignature) { - signatures.add(nextObject as PGPSignature) - } + pgpIn.close() + return signatures.toList() + } catch (e: UnsupportedPacketVersionException) { + throw PGPException("Unsupported packet version encountered.", e) + } catch (e: ClassCastException) { + throw PGPException("Unexpected packet encountered.", e) + } catch (e: IllegalArgumentException) { + throw PGPException("Malformed packet encountered.", e) } - - pgpIn.close() - return signatures.toList() } /** diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/util/ArmorUtils.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/util/ArmorUtils.kt index b5d5b839..b6e802b2 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/util/ArmorUtils.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/util/ArmorUtils.kt @@ -247,7 +247,8 @@ class ArmorUtils { .add(OpenPgpFingerprint.of(publicKey).prettyPrint()) // Primary / First User ID (primary ?: first)?.let { - headerMap.getOrPut(HEADER_COMMENT) { mutableSetOf() }.add(it) + headerMap.getOrPut(HEADER_COMMENT) { mutableSetOf() } + .add(it.replace("\n", "\\n").replace("\r", "\\r")) } // X-1 further identities when (userIds.size) { diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/util/Passphrase.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/util/Passphrase.kt index 4d1e49d2..bd25f2b9 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/util/Passphrase.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/util/Passphrase.kt @@ -11,14 +11,9 @@ import org.bouncycastle.util.Arrays * * @param chars may be null for empty passwords. */ -class Passphrase(chars: CharArray?) { +class Passphrase(private val chars: CharArray?) { private val lock = Any() private var valid = true - private val chars: CharArray? - - init { - this.chars = trimWhitespace(chars) - } /** * Return a copy of the underlying char array. A return value of null represents an empty @@ -67,6 +62,13 @@ class Passphrase(chars: CharArray?) { override fun hashCode(): Int = getChars()?.let { String(it) }.hashCode() + /** + * Return a copy of this [Passphrase], but with whitespace characters trimmed off. + * + * @return copy with trimmed whitespace + */ + fun withTrimmedWhitespace(): Passphrase = Passphrase(trimWhitespace(chars)) + companion object { /** diff --git a/pgpainless-core/src/test/kotlin/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTest.kt b/pgpainless-core/src/test/kotlin/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTest.kt new file mode 100644 index 00000000..bc73617a --- /dev/null +++ b/pgpainless-core/src/test/kotlin/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTest.kt @@ -0,0 +1,48 @@ +// SPDX-FileCopyrightText: 2025 Paul Schaub +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.bouncycastle.fuzzing + +import com.code_intelligence.jazzer.api.FuzzedDataProvider +import com.code_intelligence.jazzer.junit.DictionaryFile +import com.code_intelligence.jazzer.junit.FuzzTest +import org.bouncycastle.bcpg.ArmoredInputException +import org.bouncycastle.bcpg.UnsupportedPacketVersionException +import org.bouncycastle.openpgp.PGPException +import org.bouncycastle.openpgp.PGPUtil +import org.bouncycastle.openpgp.bc.BcPGPObjectFactory +import java.io.EOFException +import java.io.IOException + +class PGPObjectFactoryFuzzingTest { + + @FuzzTest + @DictionaryFile(resourcePath = "ascii_armor.dict") + @DictionaryFile(resourcePath = "openpgp.dict") + fun parseFuzzedObjects(provider: FuzzedDataProvider) { + val encoding = provider.consumeRemainingAsBytes() + + if (encoding.isEmpty()) { + return + } + try { + val decIn = PGPUtil.getDecoderStream(encoding.inputStream()) + val objFac = BcPGPObjectFactory(decIn) + var obj = objFac.nextObject() + while (obj != null) { + obj = objFac.nextObject() + } + } catch (e: ArmoredInputException) { + return + } catch (e: PGPException) { + return + } catch (e: EOFException) { + return + } catch (e: IOException) { + return + } catch (e: UnsupportedPacketVersionException) { + return + } + } +} diff --git a/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-109647c495d69596e778c9d8077547b9ecf227a3 b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-109647c495d69596e778c9d8077547b9ecf227a3 new file mode 100644 index 00000000..da0c74a5 Binary files /dev/null and b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-109647c495d69596e778c9d8077547b9ecf227a3 differ diff --git a/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-16f60c43a386bd079675f4b67da22a6abc986fa1 b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-16f60c43a386bd079675f4b67da22a6abc986fa1 new file mode 100644 index 00000000..be665fdb --- /dev/null +++ b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-16f60c43a386bd079675f4b67da22a6abc986fa1 @@ -0,0 +1 @@ +---Q(K \ No newline at end of file diff --git a/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-461a23344509ca1e8cae0c6e76d4dd3c8adf45d1 b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-461a23344509ca1e8cae0c6e76d4dd3c8adf45d1 new file mode 100644 index 00000000..56ffc575 Binary files /dev/null and b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-461a23344509ca1e8cae0c6e76d4dd3c8adf45d1 differ diff --git a/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-a2bb907275f07fc8b8522f3d1d88f7a77b7cb193 b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-a2bb907275f07fc8b8522f3d1d88f7a77b7cb193 new file mode 100644 index 00000000..8993c6b6 Binary files /dev/null and b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-a2bb907275f07fc8b8522f3d1d88f7a77b7cb193 differ diff --git a/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-b8484cb8aa998062e1c4a7e8f749287d29b1a3b8 b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-b8484cb8aa998062e1c4a7e8f749287d29b1a3b8 new file mode 100644 index 00000000..5c5d37a4 Binary files /dev/null and b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-b8484cb8aa998062e1c4a7e8f749287d29b1a3b8 differ diff --git a/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-f25481c9ffd17932404b3826bbc97c6a1f818446 b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-f25481c9ffd17932404b3826bbc97c6a1f818446 new file mode 100644 index 00000000..827e0ae5 --- /dev/null +++ b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-f25481c9ffd17932404b3826bbc97c6a1f818446 @@ -0,0 +1,5 @@ +-----BEGIN PGP MESSAG----- + +ywtiAAECAwTA/+66vg== +=pAS2 +-----END PGP MESSAGE----- diff --git a/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/literaldata_binary_coffeebabe.asc b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/literaldata_binary_coffeebabe.asc new file mode 100644 index 00000000..83e2bbfa --- /dev/null +++ b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/literaldata_binary_coffeebabe.asc @@ -0,0 +1,5 @@ +-----BEGIN PGP MESSAGE----- + +ywtiAAECAwTA/+66vg== +=pAS2 +-----END PGP MESSAGE----- diff --git a/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/ascii_armor.dict b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/ascii_armor.dict new file mode 100644 index 00000000..210b06c5 --- /dev/null +++ b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/ascii_armor.dict @@ -0,0 +1,39 @@ +# +# AFL Dictionary for OpenPGP (RFC9580) +# ------------------------------------------ +# +# Created by Paul Schaub + +# +# ASCII Armor +# +BEGIN_PGP_MESSAGE="-----BEGIN PGP MESSAGE-----" +END_PGP_MESSAGE="-----END PGP MESSAGE-----" +BEGIN_PGP_SIGNATURE="-----BEGIN PGP SIGNATURE-----" +END_PGP_SIGNATURE="-----END PGP SIGNATURE-----" +BEGIN_PGP_PUBLIC_KEY="-----BEGIN PGP PUBLIC KEY-----" +END_PGP_PUBLIC_KEY="-----END PGP PUBLIC KEY-----" +BEGIN_PGP_PUBLIC_KEY_BLOCK="-----BEGIN PGP PUBLIC KEY BLOCK-----" +END_PGP_PUBLIC_KEY_BLOCK="-----END PGP PUBLIC KEY BLOCK-----" +BEGIN_PGP_PRIVATE_KEY="-----BEGIN PGP PRIVATE KEY-----" +END_PGP_PRIVATE_KEY="-----END PGP PRIVATE KEY-----" +BEGIN_PGP_PRIVATE_KEY_BLOCK="-----BEGIN PGP PRIVATE KEY BLOCK-----" +END_PGP_PRIVATE_KEY_BLOCK="-----END PGP PRIVATE KEY BLOCK-----" +BEGIN_PGP_SIGNED_MESSAGE="-----BEGIN PGP SIGNED MESSAGE-----" + +HEADER_VERSION="Version" +HEADER_COMMENT="Comment" +HEADER_HASH="Hash" +HEADER_CHARSET="Charset" +HASH_SHA224="SHA224" +HASH_SHA256="SHA256" +HASH_SHA384="SHA384" +HASH_SHA512="SHA512" + +PART_BEGIN="BEGIN" +PART_PGP="PGP" +PART_MESSAGE="MESSAGE" +PART_BLOCK="BLOCK" +PART_PUBLIC="PUBLIC" +PART_PRIVATE="PRIVATE" +PART_KEY="KEY" diff --git a/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/openpgp.dict b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/openpgp.dict new file mode 100644 index 00000000..e0eb30dc --- /dev/null +++ b/pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/openpgp.dict @@ -0,0 +1,34 @@ +# +# AFL Dictionary for OpenPGP (RFC9580) +# ------------------------------------------ +# +# Created by Paul Schaub + +# +# Packet Type IDs +# +RESERVED="\x00" +PKESK="\x01" +SIG="\x02" +SKESK="\0x03" +OPS="\x04" +SECKEY="\x05" +PUBKEY="\x06" +SECSUBKEY="\x07" +COMP="\x08" +SED="\x09" +MARKER="\x0A" +LIT="\x0B" +TRUST="\x0C" +UID="\x0D" +PUBSUBKEY="\x0E" +UAT="\x11" +SEIPD="\x12" +MOD="\x13" +RES20="\x14" +PADDING="\x15" + +# +# Entire Packets +# +MARKER_PACKET="\xCA\x03\x50\x47\x50" \ No newline at end of file diff --git a/pgpainless-sop/build.gradle b/pgpainless-sop/build.gradle index 53b499c6..70a4a743 100644 --- a/pgpainless-sop/build.gradle +++ b/pgpainless-sop/build.gradle @@ -18,6 +18,9 @@ dependencies { testImplementation "org.junit.jupiter:junit-jupiter-params:$junitVersion" testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion" + // Jazzer for Fuzzing + testImplementation "com.code-intelligence:jazzer-junit:$jazzerVersion" + // Logging testImplementation "ch.qos.logback:logback-classic:$logbackVersion" diff --git a/pgpainless-sop/src/main/kotlin/org/pgpainless/sop/ArmorImpl.kt b/pgpainless-sop/src/main/kotlin/org/pgpainless/sop/ArmorImpl.kt index 40ac811d..2a5dd6e7 100644 --- a/pgpainless-sop/src/main/kotlin/org/pgpainless/sop/ArmorImpl.kt +++ b/pgpainless-sop/src/main/kotlin/org/pgpainless/sop/ArmorImpl.kt @@ -14,6 +14,7 @@ import org.pgpainless.util.ArmoredOutputStreamFactory import sop.Ready import sop.exception.SOPGPException import sop.operation.Armor +import java.io.IOException /** Implementation of the `armor` operation using PGPainless. */ class ArmorImpl : Armor { @@ -26,8 +27,14 @@ class ArmorImpl : Armor { val bufferedOutputStream = BufferedOutputStream(outputStream) // Determine the nature of the given data - val openPgpIn = OpenPgpInputStream(data) - openPgpIn.reset() + val openPgpIn = OpenPgpInputStream(data, false).apply { + try { + inspectBuffer() + } catch (e: IOException) { + // ignore + } + reset() + } if (openPgpIn.isAsciiArmored) { // armoring already-armored data is an idempotent operation diff --git a/pgpainless-sop/src/main/kotlin/org/pgpainless/sop/DecryptImpl.kt b/pgpainless-sop/src/main/kotlin/org/pgpainless/sop/DecryptImpl.kt index de2b2b3c..45210683 100644 --- a/pgpainless-sop/src/main/kotlin/org/pgpainless/sop/DecryptImpl.kt +++ b/pgpainless-sop/src/main/kotlin/org/pgpainless/sop/DecryptImpl.kt @@ -4,6 +4,7 @@ package org.pgpainless.sop +import org.bouncycastle.bcpg.UnsupportedPacketVersionException import java.io.IOException import java.io.InputStream import java.io.OutputStream @@ -15,6 +16,7 @@ import org.pgpainless.algorithm.SymmetricKeyAlgorithm import org.pgpainless.decryption_verification.ConsumerOptions import org.pgpainless.exception.MalformedOpenPgpMessageException import org.pgpainless.exception.MissingDecryptionMethodException +import org.pgpainless.exception.ModificationDetectionException import org.pgpainless.exception.WrongPassphraseException import org.pgpainless.util.Passphrase import sop.DecryptionResult @@ -23,6 +25,8 @@ import sop.SessionKey import sop.exception.SOPGPException import sop.operation.Decrypt import sop.util.UTF8Util +import java.util.zip.ZipException +import kotlin.NoSuchElementException /** Implementation of the `decrypt` operation using PGPainless. */ class DecryptImpl : Decrypt { @@ -53,15 +57,32 @@ class DecryptImpl : Decrypt { throw SOPGPException.BadData(e) } catch (e: IOException) { throw SOPGPException.BadData(e) - } finally { + } catch (e: UnsupportedPacketVersionException) { + throw SOPGPException.BadData(e) + } catch (e: ModificationDetectionException) { + throw SOPGPException.BadData(e) + } + finally { // Forget passphrases after decryption protector.clear() } return object : ReadyWithResult() { override fun writeTo(outputStream: OutputStream): DecryptionResult { - Streams.pipeAll(decryptionStream, outputStream) - decryptionStream.close() + try { + Streams.pipeAll(decryptionStream, outputStream) + decryptionStream.close() + } catch (e: MalformedOpenPgpMessageException) { + throw SOPGPException.BadData(e) + } catch (e: ModificationDetectionException) { + throw SOPGPException.BadData(e) + } catch (e: ZipException) { + throw SOPGPException.BadData(e) + } catch (e: IOException) { + throw SOPGPException.BadData(e) + } catch (e: NoSuchElementException) { + throw SOPGPException.BadData(e) + } val metadata = decryptionStream.metadata if (!metadata.isEncrypted) { diff --git a/pgpainless-sop/src/main/kotlin/org/pgpainless/sop/DetachedVerifyImpl.kt b/pgpainless-sop/src/main/kotlin/org/pgpainless/sop/DetachedVerifyImpl.kt index 08472144..c4a6a550 100644 --- a/pgpainless-sop/src/main/kotlin/org/pgpainless/sop/DetachedVerifyImpl.kt +++ b/pgpainless-sop/src/main/kotlin/org/pgpainless/sop/DetachedVerifyImpl.kt @@ -29,8 +29,11 @@ class DetachedVerifyImpl : DetachedVerify { override fun data(data: InputStream): List { try { val verificationStream = - PGPainless.decryptAndOrVerify().onInputStream(data).withOptions(options) - + try { + PGPainless.decryptAndOrVerify().onInputStream(data).withOptions(options) + } catch (e: RuntimeException) { + throw SOPGPException.BadData(e) + } Streams.drain(verificationStream) verificationStream.close() diff --git a/pgpainless-sop/src/test/java/org/pgpainless/sop/GenerateKeyTest.java b/pgpainless-sop/src/test/java/org/pgpainless/sop/GenerateKeyTest.java index ca6df790..521cdfe0 100644 --- a/pgpainless-sop/src/test/java/org/pgpainless/sop/GenerateKeyTest.java +++ b/pgpainless-sop/src/test/java/org/pgpainless/sop/GenerateKeyTest.java @@ -100,4 +100,14 @@ public class GenerateKeyTest { assertThrows(SOPGPException.UnsupportedProfile.class, () -> sop.generateKey().profile("invalid")); } + + @Test + public void generateKeyWithNewlinesInUserId() throws IOException { + byte[] keyBytes = sop.generateKey() + .userId("Foo\n\nBar") + .generate() + .getBytes(); + + assertTrue(new String(keyBytes).contains("Foo\\n\\nBar")); + } } diff --git a/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTest.java b/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTest.java new file mode 100644 index 00000000..ead6098a --- /dev/null +++ b/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTest.java @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: 2025 Paul Schaub +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.sop.fuzzing; + +import com.code_intelligence.jazzer.api.FuzzedDataProvider; +import com.code_intelligence.jazzer.junit.FuzzTest; +import org.bouncycastle.util.Arrays; +import org.pgpainless.sop.SOPImpl; +import sop.SOP; + +import java.io.IOException; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +public class AsciiArmorFuzzTest { + + private final SOP sop = new SOPImpl(); + + @FuzzTest( + maxDuration = "60s" + ) + public void armorAndDearmorData(FuzzedDataProvider data) throws IOException { + byte[] bytes = data.consumeRemainingAsBytes(); + + byte[] armored = sop.armor().data(bytes).getBytes(); + if (Arrays.areEqual(bytes, armored)) { + // armoring already armored data is idempotent + return; + } + + byte[] dearmored = sop.dearmor().data(armored).getBytes(); + assertArrayEquals(bytes, dearmored, new String(armored)); + } +} diff --git a/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTest.java b/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTest.java new file mode 100644 index 00000000..5277cac2 --- /dev/null +++ b/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTest.java @@ -0,0 +1,103 @@ +// SPDX-FileCopyrightText: 2025 Paul Schaub +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.sop.fuzzing; + +import com.code_intelligence.jazzer.api.FuzzedDataProvider; +import com.code_intelligence.jazzer.junit.FuzzTest; +import org.bouncycastle.util.encoders.Hex; +import org.bouncycastle.util.io.Streams; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.pgpainless.exception.MissingDecryptionMethodException; +import org.pgpainless.exception.ModificationDetectionException; +import org.pgpainless.sop.SOPImpl; +import sop.SOP; +import sop.exception.SOPGPException; +import sop.operation.Decrypt; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + +public class EncryptedMessageFuzzingTest { + + private final SOP sop = new SOPImpl(); + private final String password = "sw0rdf1sh"; + private final byte[] data = "Hello, World!\n".getBytes(StandardCharsets.UTF_8); + + private static List keys; + + @BeforeAll + public static void setup() throws IOException { + keys = getKeys(); + } + + private static List getKeys() throws IOException { + List keys = new ArrayList<>(); + + String dir = "/org/pgpainless/sop/fuzzing/testKeys"; + InputStream in = EncryptedMessageFuzzingTest.class.getResourceAsStream(dir); + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + + String file; + while ((file = reader.readLine()) != null) { + if (!file.endsWith(".key.asc")) { + continue; + } + + try(InputStream fIn = EncryptedMessageFuzzingTest.class.getResourceAsStream(dir + "/" + file)) { + byte[] b = Streams.readAll(fIn); + keys.add(b); + } + } + reader.close(); + + return keys; + } + + @FuzzTest( + maxDuration = "60s" + ) + public void decryptFuzzedMessage(FuzzedDataProvider provider) { + byte[] ciphertext = provider.consumeRemainingAsBytes(); + if (ciphertext.length == 0) { + return; + } + + try { + Decrypt decrypt = sop.decrypt(); + for (byte[] k : keys) { + decrypt.withKey(k); + } + byte[] decrypted = decrypt.withPassword(password) + .ciphertext(ciphertext) + .toByteArrayAndResult() + .getBytes(); + + assertArrayEquals(data, decrypted); + } catch (SOPGPException.BadData e) { + // expected + } catch (SOPGPException.CannotDecrypt e) { + // expected + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTest.java b/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTest.java new file mode 100644 index 00000000..d90abb1c --- /dev/null +++ b/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTest.java @@ -0,0 +1,67 @@ +// SPDX-FileCopyrightText: 2025 Paul Schaub +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.sop.fuzzing; + +import com.code_intelligence.jazzer.api.FuzzedDataProvider; +import com.code_intelligence.jazzer.junit.FuzzTest; +import org.bouncycastle.openpgp.PGPException; +import org.bouncycastle.openpgp.api.KeyPassphraseProvider; +import org.bouncycastle.openpgp.api.OpenPGPKey; +import org.bouncycastle.openpgp.api.OpenPGPKeyReader; +import org.bouncycastle.openpgp.api.exception.KeyPassphraseException; +import org.bouncycastle.util.encoders.Hex; +import org.junit.jupiter.api.Test; +import org.pgpainless.sop.SOPImpl; +import sop.SOP; +import sop.exception.SOPGPException; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +public class GenerateKeyFuzzTest { + + private final SOP sop = new SOPImpl(); + + @FuzzTest(maxDuration = "5m") + public void generateKeyWithFuzzedUserId(FuzzedDataProvider provider) throws IOException { + String userId = provider.consumeRemainingAsString(); + + try { + byte[] keyBytes = sop.generateKey() + .userId(userId) + .generate() + .getBytes(); + + OpenPGPKey key = new OpenPGPKeyReader().parseKey(keyBytes); + assertNotNull(key.getUserId(userId), "Cannot fetch user-id for '" + userId + "' (" + Hex.toHexString(userId.getBytes(StandardCharsets.UTF_8)) + ")\n" + new String(keyBytes)); + } catch (IllegalArgumentException e) { + // expected. + } + } + + @FuzzTest + public void generateKeyWithFuzzedPassphrase(FuzzedDataProvider provider) throws IOException, KeyPassphraseException { + byte[] passphrase = provider.consumeRemainingAsBytes(); + + try { + byte[] keyBytes = sop.generateKey() + .withKeyPassword(passphrase) + .generate() + .getBytes(); + + OpenPGPKey key = new OpenPGPKeyReader().parseKey(keyBytes); + OpenPGPKey.OpenPGPPrivateKey pk = key.getPrimarySecretKey().unlock(new String(passphrase).toCharArray()); + assertNotNull(pk, "Got null result unlocking key that was generated with passphrase 0x'" + Hex.toHexString(passphrase) + "'"); + } + catch (SOPGPException.PasswordNotHumanReadable e) { + // expected. + } + catch (PGPException e) { + throw new RuntimeException("Cannot unlock key that was generated with passphrase 0x'" + Hex.toHexString(passphrase) + "'", e); + } + } +} diff --git a/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/ParseCertFuzzTest.java b/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/ParseCertFuzzTest.java new file mode 100644 index 00000000..97324535 --- /dev/null +++ b/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/ParseCertFuzzTest.java @@ -0,0 +1,52 @@ +// SPDX-FileCopyrightText: 2025 Paul Schaub +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.sop.fuzzing; + +import com.code_intelligence.jazzer.api.FuzzedDataProvider; +import com.code_intelligence.jazzer.junit.FuzzTest; +import org.bouncycastle.bcpg.ArmoredInputException; +import org.bouncycastle.bcpg.UnsupportedPacketVersionException; +import org.bouncycastle.openpgp.api.OpenPGPCertificate; +import org.bouncycastle.openpgp.api.OpenPGPKeyReader; +import org.pgpainless.sop.SOPImpl; +import sop.SOP; + +import java.io.EOFException; +import java.io.IOException; + +public class ParseCertFuzzTest { + + private final SOP sop = new SOPImpl(); + + @FuzzTest(maxDuration = "30s") + public void parseOpenPGPCert(FuzzedDataProvider data) throws IOException { + byte[] certEncoding = data.consumeRemainingAsBytes(); + if (certEncoding.length == 0) { + return; + } + + try { + OpenPGPCertificate cert = new OpenPGPKeyReader().parseCertificate(certEncoding); + } + catch (ArmoredInputException e) { + // ignore + } + catch (EOFException e) { + // ignore + } + catch (IOException e) { + // ignore + } + catch (UnsupportedPacketVersionException e) { + // ignore + } + catch (ClassCastException e) { + + } + catch (OutOfMemoryError e) { + + } + } +} diff --git a/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTest.java b/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTest.java new file mode 100644 index 00000000..ab961811 --- /dev/null +++ b/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTest.java @@ -0,0 +1,35 @@ +// SPDX-FileCopyrightText: 2025 Paul Schaub +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.sop.fuzzing; + +import com.code_intelligence.jazzer.api.FuzzedDataProvider; +import com.code_intelligence.jazzer.junit.FuzzTest; +import org.bouncycastle.bcpg.UnsupportedPacketVersionException; +import org.bouncycastle.openpgp.api.OpenPGPKeyReader; + +import java.io.IOException; + +public class PublicKeyPacketFuzzTest { + + private final OpenPGPKeyReader reader = new OpenPGPKeyReader(); + + @FuzzTest(maxDuration = "60s") + public void parsePublicKeyPacket(FuzzedDataProvider provider) { + byte[] encoding = provider.consumeRemainingAsBytes(); + if (encoding.length == 0) { + return; + } + + try { + reader.parseCertificate(encoding); + } catch (IOException e) { + // ignore + } catch (UnsupportedPacketVersionException e) { + // ignore + } catch (ClassCastException e) { + // ignore + } + } +} diff --git a/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTest.java b/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTest.java new file mode 100644 index 00000000..cb3cfd9a --- /dev/null +++ b/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTest.java @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: 2025 Paul Schaub +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.sop.fuzzing; + +import com.code_intelligence.jazzer.api.FuzzedDataProvider; +import com.code_intelligence.jazzer.junit.FuzzTest; +import org.bouncycastle.bcpg.UnsupportedPacketVersionException; +import org.bouncycastle.openpgp.api.OpenPGPKeyReader; + +import java.io.IOException; + +public class SecretKeyPacketFuzzTest { + + private final OpenPGPKeyReader reader = new OpenPGPKeyReader(); + + @FuzzTest(maxDuration = "6ßs") + public void parseSecretKeyPacket(FuzzedDataProvider provider) + { + byte[] encoding = provider.consumeRemainingAsBytes(); + if (encoding.length == 0) { + return; + } + + try { + reader.parseKey(encoding); + } catch (IOException e) { + // ignore + } catch (UnsupportedPacketVersionException e) { + // ignore + } catch (ClassCastException e) { + // ignore + } + } +} diff --git a/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/SignatureFuzzTest.java b/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/SignatureFuzzTest.java new file mode 100644 index 00000000..c13057b0 --- /dev/null +++ b/pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/SignatureFuzzTest.java @@ -0,0 +1,306 @@ +// SPDX-FileCopyrightText: 2025 Paul Schaub +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.sop.fuzzing; + +import com.code_intelligence.jazzer.api.FuzzedDataProvider; +import com.code_intelligence.jazzer.junit.FuzzTest; +import org.pgpainless.sop.SOPImpl; +import sop.SOP; +import sop.Verification; +import sop.exception.SOPGPException; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; + +public class SignatureFuzzTest { + + private final SOP sop = new SOPImpl(); + private final byte[] data = "Hello, World!\n".getBytes(StandardCharsets.UTF_8); + + private final String v4_ed25519 = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" + + "Comment: D7BC FF6B B105 40D9 87F9 CB6E 542D C9F6 FCAE AD63\n" + + "Comment: Alice \n" + + "\n" + + "mDMEaGzu+BYJKwYBBAHaRw8BAQdAlqjB241N44drAJvxa3wx0uRb5bxuVNXrCwPZ\n" + + "yf4Qg+O0HEFsaWNlIDxhbGljZUBwZ3BhaW5sZXNzLm9yZz7ClQQTFgoARwWCaGzu\n" + + "+AkQVC3J9vyurWMWIQTXvP9rsQVA2Yf5y25ULcn2/K6tYwKeAQKbAQUWAgMBAAQL\n" + + "CQgHBRUKCQgLBYkJZgF/ApkBAADVIwEAi599IgoqQbvetYicOt9XobSQKH+4/tB/\n" + + "cmHgD7HkGu8A/jYoA0CaYuYNWw8ZYQ8QCUIAkXApm8fO9iyTx0QU1kQMuDMEaGzu\n" + + "+BYJKwYBBAHaRw8BAQdA48KEYPTPnV86ycWzAk82aHPF2Fke5cLFsQn7/laFT1DC\n" + + "wBUEGBYKAH0Fgmhs7vgCngECmwIFFgIDAQAECwkIBwUVCgkIC18gBBkWCgAGBYJo\n" + + "bO74AAoJECL1fW9vQUTUldQBALcsF4e23VatOfew9CXwEiL6P5LMh7E8n/yUVR+j\n" + + "NBr9AP0bxSZ1UbdRIrWpg/Itpl9h98gtpT9rdVs02n0+xs5GDAAKCRBULcn2/K6t\n" + + "Y4UQAQCG/xpMgjpVNNs3wzHeVB0OCRKXsWkqHQr6xnEDAObdpwD7BD10DpdQDnSa\n" + + "HP7CArFQIuA78aIXpaVidfWVMu1mEAm4OARobO74EgorBgEEAZdVAQUBAQdAXgno\n" + + "M3Qa9wevqtyAY5MzVz3y6KTYtnfrC/YXG1fc7Q4DAQgHwnUEGBYKAB0Fgmhs7vgC\n" + + "ngECmwwFFgIDAQAECwkIBwUVCgkICwAKCRBULcn2/K6tY7GuAP9Kf1Ec1GJmZ99U\n" + + "HsgiN60os+6adMLj4G2ASiIbNSDvKgD9F/VLFIb/eN7kJQp3E5C15x5pMMKEI/rj\n" + + "wdrKmYH3aAw=\n" + + "=4uX6\n" + + "-----END PGP PUBLIC KEY BLOCK-----"; + private static final String v4_rsa4096 = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" + + "Comment: C2C1 DB5E 3AE2 9711 62D9 7BFB 101D 531D 1C69 12A7\n" + + "Comment: Alice \n" + + "\n" + + "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\n" + + "XgWruN+wC+b9XY+Rrn+5\n" + + "=ppAk\n" + + "-----END PGP PUBLIC KEY BLOCK-----"; + + private static final String v4_nistP256 = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" + + "Comment: 7A00 864E BC9C 503A 05C7 4687 338C BC25 2B16 66D4\n" + + "Comment: Alice \n" + + "\n" + + "xlIEaG0TDxMIKoZIzj0DAQcCAwRixWErG7QLr7ACFxUGjnVHuy1fzaHArCjhXQdJ\n" + + "cFkly6lxXqpth8a6Ef7ww4xicoCBUkMWDcMDmArolc8pzK7ZzRxBbGljZSA8YWxp\n" + + "Y2VAcGdwYWlubGVzcy5vcmc+wp8EExMKAFEFgmhtEw8JEDOMvCUrFmbUFqEEegCG\n" + + "TrycUDoFx0aHM4y8JSsWZtQCmwEFFQoJCAsFFgIDAQAECwkIBwknCQEJAgkDCAEC\n" + + "ngkFiQlmAYACmQEAAAjYAP9/DDAzA0Ykon8ACI6atMQYYnbIU894956akr64mmo9\n" + + "FgEAke0o9t/zrH0z1LD7yr3qkW0j+NK2OEy1XIjADrp5wRLOUgRobRMPEwgqhkjO\n" + + "PQMBBwIDBAqrl9l6YvdrzOWXO4ZFakQCI22HGw4U806IrjGuYFBwdhnu+lGFVFsD\n" + + "CGMXY2ZhslsSNAJNDrxAP+xeAulDaDvCwBgEGBMKAIoFgmhtEw8JEGTDz6W23cHo\n" + + "FqEE4bpPaE2vfK5LIsVuZMPPpbbdwegCmwJfIAQZEwoABgWCaG0TDwAKCRBkw8+l\n" + + "tt3B6HvEAQDN/84YKO0rDGbVyZEuVrOxeHXTC/8DlhHYx9Am5TZu9wD+NJCIzwzU\n" + + "a4fPISDUJRH+vxAHsRSp4rOCod+tgXsq+7wAANrKAP9dyYnyMEfZcts3i/BZo25D\n" + + "pqIrfDeZ1ZwP7mMZQ9lmRgEAqKKGBSLnLViyng5Z7Q5BqzW01q7CkLXZZ5IXaNns\n" + + "0XTOVgRobRMPEggqhkjOPQMBBwIDBC9IY09+8DOpG9aOK2iY6isENu6TvDClVvug\n" + + "SBnnsUdS3fOhVYYfcniboqrV6+BmfpbwptdGyD0yBUwzfL62/QADAQgHwngEGBMK\n" + + "ACoFgmhtEw8JEMlGff4yehhJFqEEC15pityd3XNDfeS0yUZ9/jJ6GEkCmwwAAHt4\n" + + "AQDG3xESM+ryzFUb8c4ldcb5NQ32eg0L1nFgTQEBHNJFpQEAi5xO1ZM4wEOlzk3e\n" + + "SC3qFyx9K6WQBlpY7TNdgqX8aEY=\n" + + "=1lGG\n" + + "-----END PGP PUBLIC KEY BLOCK-----\n"; + private static final String v4_nistP384 = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" + + "Comment: C52D CD97 0953 D8A9 3136 509D 20B0 88C6 9BBF 089C\n" + + "Comment: Alice \n" + + "\n" + + "xm8EaG0TIhMFK4EEACIDAwTn7aRgEpefzWD3a9g/h7BA6EOVHxcV93BKE2Zf53kT\n" + + "Yvs13YmY1wTDjsYbHTGTMmm46Q+QSphhiWTVyodykqinFnhmmt/R1L4Z3qQWVBWE\n" + + "JNyS+swSqPSPQnIEygjqJrPNHEFsaWNlIDxhbGljZUBwZ3BhaW5sZXNzLm9yZz7C\n" + + "vwQTEwoAUQWCaG0TIgkQILCIxpu/CJwWoQTFLc2XCVPYqTE2UJ0gsIjGm78InAKb\n" + + "AQUVCgkICwUWAgMBAAQLCQgHCScJAQkCCQMIAQKeCQWJCWYBgAKZAQAApfYBgNg1\n" + + "Ni0jkkT1TncTslHERidv+teYXTNhtE1Qe4fK9LM/iTruMo3KI5vLQ0yThODrtAF5\n" + + "AWzr3j/vhAZ0keXBTFiKj+8L564uGZ/Ab2wQUYVNgyrJ4nIylQqjl5v3AoxaQa8s\n" + + "zm8EaG0TIhMFK4EEACIDAwT2Pz19+CkZouSUqvLtDGKdOfiRoAg2TmVEMkjanwyM\n" + + "pml7g4XVh0D0WNktvTltHvDepZU4JO5Dse+zC+KlORk6w6KABrC8dujPlO2miFDO\n" + + "ziqrZClDgkdeJG0F4I/QIbjCwFgEGBMKAKoFgmhtEyIJEBxvr0D4OkYGFqEEB1Ic\n" + + "cXRzT2WMi+p2HG+vQPg6RgYCmwJ/IAQZEwoABgWCaG0TIgAKCRAcb69A+DpGBgnx\n" + + "AYDLFfyzoaL02LRlOULvqicJjDuWII4HHQKlWU0bL1CPdVGLizQBPVIrqOE7ne4X\n" + + "ofQBf3S4CH2TGJdG6joVa5J22VLXhKFVD9MsO7X+QpLcpvpcdWdZpu8pSEIAQ1ck\n" + + "VwJEAgAAzNMBf34fez/WxNFg7autqSXqSRjeQH6EgJeommuCZg90530WnDRQrm53\n" + + "a4Ava+p4nW766gGAxzPG8wZ9YiNFWXP80rPaFnVDUvpAzVN6QulNgA9X++PFdnn8\n" + + "udhXqbn/tjtmhz4ZznMEaG0TIhIFK4EEACIDAwSyypi9tH1VKoyz+whB1u8Poi9n\n" + + "9G5bWBpQwlkqDMz5P7D0To7m2bnif6qjXfBo0e43NLst7XL9YTXKGiHssGWdvBjW\n" + + "nUjM9UXWIpuigAEX5Run5Bn/mryfrIL6ocJIrJkDAQkIwpgEGBMKACoFgmhtEyIJ\n" + + "EB4h59bAP7IKFqEERagGFBZG9V3Kbwc8HiHn1sA/sgoCmwwAAI91AX4hX/+DJLdN\n" + + "jhZXEiY9SX3jyD97VfvZMTokCB7AfPGZ1GIMtaaTgN/fjhlZcQuoQhsBfjUvF5Rr\n" + + "S0CgvzBn3v/m72uykFayWZ06cHufSrgkR7UygCjGlVPO5bp4ZoPhW7FUqg==\n" + + "=UtdE\n" + + "-----END PGP PUBLIC KEY BLOCK-----\n"; + private static final String v4_nistP521 = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" + + "Comment: E17E 59B5 7DAD 1868 AA48 053F C762 4862 050A 405F\n" + + "Comment: Alice \n" + + "\n" + + "xpMEaG0TLBMFK4EEACMEIwQAFc+kLfLeUvejNlyhZHH6DF9QGvYD0SzJnTQyecDP\n" + + "GUk0kUFPx0i2UFh/bFNvfqA5DFG/6WSnWcasSNH1YZAXx8cAUXyISgGSiuqGUztw\n" + + "/sSkcTSZ0ZJwHEMNlk8BPDdSgPadvy54BxSR+8bxGj+rFmgdB45V/RrXMYNyYAEF\n" + + "m9HINCfNHEFsaWNlIDxhbGljZUBwZ3BhaW5sZXNzLm9yZz7CwCIEExMKAFEFgmht\n" + + "EywJEMdiSGIFCkBfFqEE4X5ZtX2tGGiqSAU/x2JIYgUKQF8CmwEFFQoJCAsFFgID\n" + + "AQAECwkIBwknCQEJAgkDCAECngkFiQlmAYACmQEAAMf/AgQPsBNL2LNlZLHr8REB\n" + + "TS1ykw0S1RfEHir2XuneunYVxQD+WIK+f9O3lGoA79ojEnbWY3vn5KYL3uIQGTrs\n" + + "XeJAEAIJAUCmZetIcQD3aixOURerS8gS5pn8jAbSESpzaSyW/EFOCRpMo+zTkZYk\n" + + "/wFfYayLgtRiEscppMUfyb1lwjiN4vePzpMEaG0TLBMFK4EEACMEIwQBc8xQHGwC\n" + + "oG04BAmED/5Ju4EkQJC0qTdCLzktWOyHoVplqcUuMR27cf+kHlF65VUJ2OsX8ETH\n" + + "LHKir9QnPDYSBjcA4Jzq7IBRQrKRF/YKC/UiGI2OMUTB9DF2IpTFWooGEm3WNtY7\n" + + "r97x3OPNAQjg4Jius/OpbSoOwsxC8Wb44Kw/lTPCwJ4EGBMKAM0FgmhtEywJECtT\n" + + "oxFC+nyfFqEEeshC8VthZwiw1D6OK1OjEUL6fJ8CmwKiIAQZEwoABgWCaG0TLAAK\n" + + "CRArU6MRQvp8n5aqAgjS3GZHO7RIJji2zn6Vo7r0C3IXhBx/+ZDmgAEJxZT1WGYR\n" + + "N9Vjii5tpGIKem6U5ChptHulYvFlK+nvnQfpADFSJQIJAQV7tMmyeTsTw8IOFMAJ\n" + + "bxaRU+Bn9X3WqcNugzaBhNREW81WFGnRKd2zEK+GY1FEnZvIOj1UoQSrpjPiYAxz\n" + + "alH9AACLIgII29p8NxOFdMGvvRNcQ5tAr32flqDHD62K3rOYo0qwI1D3OYL6xk6v\n" + + "cjdoLoLoFa5sDse+4QffjJ9UxsEw+Uye85wCCQEaPDUdeLFLzwcqJQp3X7a3Ok1h\n" + + "aV3MYf5NYSrTGGVk8KT7xWZOaLCDWdtAF/kteBT/Prg6NpTBZH8fAbItm3KWks6X\n" + + "BGhtEywSBSuBBAAjBCMEAVBY8RHg8B13ra/HoWvvcNG5gl0yVMhSSSVkjJfyoWyK\n" + + "CMd3OH4fBti+Z+nllPHPlgAaw/6UMQoNq242LWtr+Y/XAX0G2snCs5dWG+biNaee\n" + + "QWvRkL/26KVwAmV1AsIfY577TXva/0y7Dj3hnAO/+x383cCAqwAsjsXrDWoscuf/\n" + + "LLxOAwEKCcK8BBgTCgAqBYJobRMsCRBcxJwrVFEM0hahBLBO62CL4VLDpYpOZVzE\n" + + "nCtUUQzSApsMAACuNQIJAQz2sTSbfeERmHa97smijy+Kqt8ZtDQ+k7vXOMSFGlVO\n" + + "mz84Kzs1+it62a+PaNPM1UnrcRE4NmppCtnVIS6kV8z7AgkBMcH5EeBCe10fbqdm\n" + + "BI0at8JPONR1s7yZ7R7z+G1EsnUkF+t3dzQrCOBlXI83KC+hb5eOXKURkfiZgdpO\n" + + "oR99QtE=\n" + + "=1kU8\n" + + "-----END PGP PUBLIC KEY BLOCK-----\n"; + private static final String v6_curve25519 = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" + + "Comment: 075CE2AD 721B3A3E 877329F1 24131A25 A43876BC DD09943D\n" + + "Comment: B1EB5C73 4E98EFEF\n" + + "Comment: Alice \n" + + "\n" + + "xioGaG0TTxsAAAAgAhlYynX3JdyxowVByJP29cYt7tTRVtMEHzj3ctWRaNvNHEFs\n" + + "aWNlIDxhbGljZUBwZ3BhaW5sZXNzLm9yZz7CwAIGExsKAAAAUwWCaG0TTyKhBgdc\n" + + "4q1yGzo+h3Mp8SQTGiWkOHa83QmUPbHrXHNOmO/vApsBBRUKCQgLBRYCAwEABAsJ\n" + + "CAcJJwkBCQIJAwgBAp4JBYkJZgGAApkBAAAAAD2DIFbG7ai9HSJKlRqtv1c8KTXc\n" + + "7PcJeF0wjKcqxrSCp2Gwhd4/CdfHEeDWxE7x0QRuXERQJLPwae1dYITvsBrk7cR4\n" + + "DpMe33Kqaj2KuWsPWhU5efaIZ68hxurXPH1eHjpXAc4qBmhtE08bAAAAINBT+USX\n" + + "w4Y/WFM6ArUXFrjZAV8+FyUa2aZJps3zZmuiwsB1BhgbCgAAAMYFgmhtE08ioQZB\n" + + "a272wKwg9+XBs4b15pDGecNCy5kqOeZzJrWLET546gKbApkgBhkbCgAAACkioQZB\n" + + "a272wKwg9+XBs4b15pDGecNCy5kqOeZzJrWLET546gWCaG0TTwAAAABLmSA4FypT\n" + + "lEiKE1Jd8isuE3+gXWRZO+/tDkrwsar5dTUFysv0NR+LDOYy/a/HbPCDhEIKjBcY\n" + + "qzTP+3R2ZZe2rGkE+77sht2j1YIcBlzm+t3HA8V20iFn4rpWHy0571hVpggAAAAA\n" + + "Bt0gnCR4K4AuIH7fZr4b9BVJ3k4kIvdk9X7S25yyjw6JxZH17fluPiJQVCu/m0be\n" + + "lj0dfqCHfTPJ2iZl3RLu0e5mBoolbN4JostQ9FzVi9dZ788jYXvnGIUnoBRu57ZO\n" + + "n3UAzioGaG0TTxkAAAAgDRJh03RIU+tZWnyRk684h/GqvO7zL8LJFxL/lHEruULC\n" + + "mwYYGwoAAAAsBYJobRNPIqEGo8G75Tf7oWt8oa59iQ32S6uKCXrpadeS/Xjdt1iE\n" + + "zyECmwwAAAAAQPQgn2hzfU/3y0CkbuuHn0+jdFLJgs8hFpDx0v1cLpiAKvWLBIZI\n" + + "sixI3KLQxiqvxZQXCg+/dQoNO1se4XZ/g6KLvGLzJ6BC5MpUfOfJoGc23u68G2K3\n" + + "WpYP1EQ/UjACBT4I\n" + + "=Uq9u\n" + + "-----END PGP PUBLIC KEY BLOCK-----\n"; + private static final String v6_curve448 = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" + + "Comment: 212F1BC9 7FF7DBF0 B6F18D83 F59BB2BC 075F26C3 2CE5F150\n" + + "Comment: 0B770469 11A0A196\n" + + "Comment: Alice \n" + + "\n" + + "xkMGaG0TXxwAAAA5ffh5M4YFiH+SEFbP8SeW7FhJns/56XYfUjk28nejYWQgl4Fd\n" + + "vihxLAtryw6iEscMoudI7NsUWC+AzRxBbGljZSA8YWxpY2VAcGdwYWlubGVzcy5v\n" + + "cmc+wsA0BhMcCgAAAFMFgmhtE18ioQYhLxvJf/fb8LbxjYP1m7K8B18mwyzl8VAL\n" + + "dwRpEaChlgKbAQUVCgkICwUWAgMBAAQLCQgHCScJAQkCCQMIAQKeCQWJCWYBgAKZ\n" + + "AQAAAAChXiCvjG1wSHZzZwaVEnfGyMGrhb/l9mjULQFaQmdEgJ33i/iEv6MQYaBS\n" + + "nPRCcI9GLjq/kkz957EhvBxeM1K5OHUAhHLy2AY4ReKB/N5Xz3D7pAivqsQzq/DS\n" + + "gIKfGQxjEt/QPy7C+qsNNHsss4l2mo3ugdV5mQV4DcBzeHJcz7hMce00HRIVRemw\n" + + "JuPhh3gEFN8hAM5DBmhtE18cAAAAOTs6skyf+PcX3A+rsPMjmEGVc1IqJw4xOqoZ\n" + + "gPghbYGGqBrYAqzr//xKshyewSMOH5fmGX8aQyoPgMLA2gYYHAoAAAD5BYJobRNf\n" + + "IqEGC4EDngLrM73LIg5bZQKYVUAM98vVI86Qq6SE4mUxlxkCmwLACyAGGRwKAAAA\n" + + "KSKhBguBA54C6zO9yyIOW2UCmFVADPfL1SPOkKukhOJlMZcZBYJobRNfAAAAAHuS\n" + + "IBQQaYywrO5u+n8R7Xcb+WoQ7FtHUmHpW5triJ/tkwfnufiC56CD465EyLJ9g+Mm\n" + + "IA+5n03AxeH0Yk7afFBgRw9pQlPb2/1P66iexPV7445sjJ9jCK2NTJaAd/H6R+CW\n" + + "iCYl5VCtkoryXNN4yad6OVt+TrEQHCF4vRUpAUAF30EO8LUuUsB0F3D0D0aDglBi\n" + + "tiAAAAAAAAR4ILw9d7lfCTtaOpBEr0YHo8kPzVcBxdDbUfo9UAqScZhwCbSVrANI\n" + + "CJw614Ss3WhTuV+l465zwccF2xh0D+VAue1AwnwnQzp518zFqTXJmOUcs7YuPWyU\n" + + "iQEA/tc+jUg9XL6EQ/5UYMhfj7nO/b8uZuD2KYPtc2e8X3mk1is05fhB9JSOOGib\n" + + "d6su8g3Pv+HQGx4AzkIGaG0TXxoAAAA4WAHz84E3zX2mIoVBETPWdzvumbTqFiUM\n" + + "uiI96b6XmWi21G8F/BdpWs1Gg347x7PbVWfq9SD7t6TCwA0GGBwKAAAALAWCaG0T\n" + + "XyKhBq9bQBVplmkyzKWaEqIweNfJ85ls16CfR2rNXYYs2vDyApsMAAAAAPQUIKzs\n" + + "xWkiYn0kM7FsHGMlMGET0wrdKg4F45dGCHDUHeUZSusp5Zs7okmY6HP4tePSMuMq\n" + + "9whjVqimGN6Xx0ybErP/ku6jExwN6QtYohZempWCZXv3SJteGI8ADuVKmcNT9MBN\n" + + "ic3vixr3vjkXsuUwBQDGDb7SRfA7DGh4mXxAaB5gUwQC+wSIG6D7gIP2Hz0fVj4A\n" + + "=9WFq\n" + + "-----END PGP PUBLIC KEY BLOCK-----\n"; + + @FuzzTest( + maxDuration = "60s" + ) + public void verifyFuzzedSig(FuzzedDataProvider provider) throws IOException { + byte[] sig = provider.consumeRemainingAsBytes(); + if (sig.length == 0) { + return; + } + + try { + List verifs = sop.verify() + .cert(v4_ed25519.getBytes(StandardCharsets.UTF_8)) + .cert(v4_rsa4096.getBytes(StandardCharsets.UTF_8)) + .cert(v4_nistP256.getBytes(StandardCharsets.UTF_8)) + .cert(v4_nistP384.getBytes(StandardCharsets.UTF_8)) + .cert(v4_nistP521.getBytes(StandardCharsets.UTF_8)) + .cert(v6_curve25519.getBytes(StandardCharsets.UTF_8)) + .cert(v6_curve448.getBytes(StandardCharsets.UTF_8)) + .signatures(sig) + .data(data); + + if (verifs.isEmpty()) { + return; + } + + for (Verification v : verifs) { + System.out.println(v.toString()); + } + } catch (SOPGPException.NoSignature e) { + // ignore + } catch (SOPGPException.BadData e) { + // expected + } + } +} diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/alice.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/alice.asc new file mode 100644 index 00000000..60329ee4 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/alice.asc @@ -0,0 +1,21 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- + +xVgEaGfc0BYJKwYBBAHaRw8BAQdATOdV6wukmqSavJGlnqhkk0fvPzhNnzvp3sv5 +gMq3BzUAAP9jcz6ydPE5rdNwUAxxOVn2stxGntC6mm0m9RI+1hYhbRCQzRxBbGlj +ZSA8YWxpY2VAcGdwYWlubGVzcy5vcmc+wp8EExYKAFEFgmhn3NAJEEjYL/TjDku0 +FqEE3bruvdTZy1Xd+RNsSNgv9OMOS7QCmwEFFQoJCAsFFgIDAQAECwkIBwknCQEJ +AgkDCAECngkFiQlmAYACmQEAAKq4AQC98RHIFbs5pyeWpKimjP3LFZ6rroorBcMc +izPAPqXEjQD+N5DSn/TJeKeld6KCB69W2KSj4BBdPvabLG6cRq+/8AbHWARoZ9zQ +FgkrBgEEAdpHDwEBB0A9Q+9+bvKSI1voDq+rb7yKjCVKVG4jO1qj/wTPF5PkSQAB +AIP7XckHeFuJ8qnp2hU2keb+Xzo+8ZlR57mj37uAuQUzEibCwBgEGBYKAIoFgmhn +3NAJEERXJjHxSbsAFqEEFQlMncw3fOJ/EBmfRFcmMfFJuwACmwJfIAQZFgoABgWC +aGfc0AAKCRBEVyYx8Um7AEw5AQDkSgGU1E6rmHO2DTj1jNXkD8k3rnyxxjP66RLi +whLVYwD9FwWQ5kXwM2qFheWbuMN7sghEt+SDQHc7tgwgnWppEwAAAGNHAQDM4ncO +o05rjfFVAaTFJ26Ixm8MK2HnGl+fQT73wyDJEgD/U/g+b7bppnSF4scuZMUSA9xQ +oyK3b5J5uNqfj+mxpgDHXQRoZ9zQEgorBgEEAZdVAQUBAQdAdEmUSz3XlPFa+u8I +0hJu+RAuJO0Sj64+ZlvawGsQhFcDAQgHAAD/Y78qz+fyfkEa6DjwhhLdZzKWJlII +KL1oW1vsNE8SVEAPGMJ4BBgWCgAqBYJoZ9zQCRBqhz9va/rd1hahBOfnmVV9LWWf +y/UZPWqHP29r+t3WApsMAADktwD/TSz5ZK5WFaaLSzpIwyA2U9XvgUvGD+5bSban +XsYU9LwA/1NWshgcBfDMRoboZGPwWIikfRUOatGph4IRj/5UZmIJ +=n5sh +-----END PGP PRIVATE KEY BLOCK----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/alice.cert b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/alice.cert new file mode 100644 index 00000000..2d75333f --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/alice.cert @@ -0,0 +1,21 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: DDBA EEBD D4D9 CB55 DDF9 136C 48D8 2FF4 E30E 4BB4 +Comment: Alice + +xjMEaGfc0BYJKwYBBAHaRw8BAQdATOdV6wukmqSavJGlnqhkk0fvPzhNnzvp3sv5 +gMq3BzXNHEFsaWNlIDxhbGljZUBwZ3BhaW5sZXNzLm9yZz7CnwQTFgoAUQWCaGfc +0AkQSNgv9OMOS7QWoQTduu691NnLVd35E2xI2C/04w5LtAKbAQUVCgkICwUWAgMB +AAQLCQgHCScJAQkCCQMIAQKeCQWJCWYBgAKZAQAAqrgBAL3xEcgVuzmnJ5akqKaM +/csVnquuiisFwxyLM8A+pcSNAP43kNKf9Ml4p6V3ooIHr1bYpKPgEF0+9pssbpxG +r7/wBs4zBGhn3NAWCSsGAQQB2kcPAQEHQD1D735u8pIjW+gOr6tvvIqMJUpUbiM7 +WqP/BM8Xk+RJwsAYBBgWCgCKBYJoZ9zQCRBEVyYx8Um7ABahBBUJTJ3MN3zifxAZ +n0RXJjHxSbsAApsCXyAEGRYKAAYFgmhn3NAACgkQRFcmMfFJuwBMOQEA5EoBlNRO +q5hztg049YzV5A/JN658scYz+ukS4sIS1WMA/RcFkOZF8DNqhYXlm7jDe7IIRLfk +g0B3O7YMIJ1qaRMAAABjRwEAzOJ3DqNOa43xVQGkxSduiMZvDCth5xpfn0E+98Mg +yRIA/1P4Pm+26aZ0heLHLmTFEgPcUKMit2+Sebjan4/psaYAzjgEaGfc0BIKKwYB +BAGXVQEFAQEHQHRJlEs915TxWvrvCNISbvkQLiTtEo+uPmZb2sBrEIRXAwEIB8J4 +BBgWCgAqBYJoZ9zQCRBqhz9va/rd1hahBOfnmVV9LWWfy/UZPWqHP29r+t3WApsM +AADktwD/TSz5ZK5WFaaLSzpIwyA2U9XvgUvGD+5bSbanXsYU9LwA/1NWshgcBfDM +RoboZGPwWIikfRUOatGph4IRj/5UZmIJ +=hJD/ +-----END PGP PUBLIC KEY BLOCK----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/alice.key b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/alice.key new file mode 100644 index 00000000..1833595e Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/alice.key differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/alice_pub.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/alice_pub.asc new file mode 100644 index 00000000..2d75333f --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/alice_pub.asc @@ -0,0 +1,21 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: DDBA EEBD D4D9 CB55 DDF9 136C 48D8 2FF4 E30E 4BB4 +Comment: Alice + +xjMEaGfc0BYJKwYBBAHaRw8BAQdATOdV6wukmqSavJGlnqhkk0fvPzhNnzvp3sv5 +gMq3BzXNHEFsaWNlIDxhbGljZUBwZ3BhaW5sZXNzLm9yZz7CnwQTFgoAUQWCaGfc +0AkQSNgv9OMOS7QWoQTduu691NnLVd35E2xI2C/04w5LtAKbAQUVCgkICwUWAgMB +AAQLCQgHCScJAQkCCQMIAQKeCQWJCWYBgAKZAQAAqrgBAL3xEcgVuzmnJ5akqKaM +/csVnquuiisFwxyLM8A+pcSNAP43kNKf9Ml4p6V3ooIHr1bYpKPgEF0+9pssbpxG +r7/wBs4zBGhn3NAWCSsGAQQB2kcPAQEHQD1D735u8pIjW+gOr6tvvIqMJUpUbiM7 +WqP/BM8Xk+RJwsAYBBgWCgCKBYJoZ9zQCRBEVyYx8Um7ABahBBUJTJ3MN3zifxAZ +n0RXJjHxSbsAApsCXyAEGRYKAAYFgmhn3NAACgkQRFcmMfFJuwBMOQEA5EoBlNRO +q5hztg049YzV5A/JN658scYz+ukS4sIS1WMA/RcFkOZF8DNqhYXlm7jDe7IIRLfk +g0B3O7YMIJ1qaRMAAABjRwEAzOJ3DqNOa43xVQGkxSduiMZvDCth5xpfn0E+98Mg +yRIA/1P4Pm+26aZ0heLHLmTFEgPcUKMit2+Sebjan4/psaYAzjgEaGfc0BIKKwYB +BAGXVQEFAQEHQHRJlEs915TxWvrvCNISbvkQLiTtEo+uPmZb2sBrEIRXAwEIB8J4 +BBgWCgAqBYJoZ9zQCRBqhz9va/rd1hahBOfnmVV9LWWfy/UZPWqHP29r+t3WApsM +AADktwD/TSz5ZK5WFaaLSzpIwyA2U9XvgUvGD+5bSbanXsYU9LwA/1NWshgcBfDM +RoboZGPwWIikfRUOatGph4IRj/5UZmIJ +=hJD/ +-----END PGP PUBLIC KEY BLOCK----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world new file mode 100644 index 00000000..8ab686ea --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world @@ -0,0 +1 @@ +Hello, World! diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.asc new file mode 100644 index 00000000..f7e94a34 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.asc @@ -0,0 +1,5 @@ +-----BEGIN PGP MESSAGE----- + +SGVsbG8gV29ybGQK +=1hzE +-----END PGP MESSAGE----- \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.enc.alice.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.enc.alice.asc new file mode 100644 index 00000000..9ffec16b --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.enc.alice.asc @@ -0,0 +1,9 @@ +-----BEGIN PGP MESSAGE----- + +wWwGFQTn55lVfS1ln8v1GT1qhz9va/rd1hIBB0CK2xMAGPBhSAztl26xmFEMGg3a +oKnwCwphhU7yshVCOTAY4zKszTvvn3CxMV8HbNQ0jr61kp9H9bwGDz8w6Nz/WQrn +S4QPVvXsLOIZd9L/KKbSWgIJAQOoAMCSkjp146L+E1uYItfRk/K4dupbQWX+jAHp +6MJvIi4rzyht7qt2C0RPPFDImzCTR9V1Ry/BCa3w4E3x3CBpFVyEy9N8mizUEJU6 +TPRvAFqekyQpjg== +=EL9J +-----END PGP MESSAGE----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.enc.alice.bin b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.enc.alice.bin new file mode 100644 index 00000000..8c70cf9b Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.enc.alice.bin differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.sig b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.sig new file mode 100644 index 00000000..5caf248d Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.sig differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.sig.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.sig.asc new file mode 100644 index 00000000..0c814c86 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world.sig.asc @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +wnUEABYKACcFgmhn3d8JEERXJjHxSbsAFqEEFQlMncw3fOJ/EBmfRFcmMfFJuwAA +AOgXAQCAXxXslQv4i9C4kAW9aOJCj7Cn7ZkMsyQvw9vTSW5R6QD9FmncQ64oOGEL +gtX9s6OFb7Bd1UEbfL7G3QS2wg0QHQc= +=o0Xk +-----END PGP SIGNATURE----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world_broken_crc.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world_broken_crc.asc new file mode 100644 index 00000000..05183ba9 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world_broken_crc.asc @@ -0,0 +1,5 @@ +-----BEGIN PGP MESSAGE----- + +SGVsbG8gV29ybGQK +=1hzA +-----END PGP MESSAGE----- \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world_missing_crc.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world_missing_crc.asc new file mode 100644 index 00000000..2f74f208 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/AsciiArmorFuzzTestInputs/armorAndDearmorData/hello-world_missing_crc.asc @@ -0,0 +1,4 @@ +-----BEGIN PGP MESSAGE----- + +SGVsbG8gV29ybGQK +-----END PGP MESSAGE----- \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-016417ab22e685a205fb1ba24fca0c0abdfbf024 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-016417ab22e685a205fb1ba24fca0c0abdfbf024 new file mode 100644 index 00000000..28453ae7 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-016417ab22e685a205fb1ba24fca0c0abdfbf024 @@ -0,0 +1 @@ + <`!J],ʥ t @:0sd$X, bcv7G5iUvXV  8 \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-4360ccd96e058fd2f83627a36f849592c6c4f113 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-4360ccd96e058fd2f83627a36f849592c6c4f113 new file mode 100644 index 00000000..698c329d Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-4360ccd96e058fd2f83627a36f849592c6c4f113 differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-5beb6a9df56d2215eb9058bd241d195a41a3d5be b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-5beb6a9df56d2215eb9058bd241d195a41a3d5be new file mode 100644 index 00000000..08115d7e --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-5beb6a9df56d2215eb9058bd241d195a41a3d5be @@ -0,0 +1 @@ + <`!J],ʥ t V  3 \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-674d33e75e52b105c63919aed5341f44ee6d34b4 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-674d33e75e52b105c63919aed5341f44ee6d34b4 new file mode 100644 index 00000000..944bbe04 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-674d33e75e52b105c63919aed5341f44ee6d34b4 @@ -0,0 +1 @@ + <`!J],ʥ t @:0sd$X, bcv7G5iUIl ',w/3Oc \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-69b4c08f74f9653ddf0bd13fd042638fafee18ab b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-69b4c08f74f9653ddf0bd13fd042638fafee18ab new file mode 100644 index 00000000..e5733fd8 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-69b4c08f74f9653ddf0bd13fd042638fafee18ab @@ -0,0 +1 @@ + <`!J],ʥ t @:0sd$X, bcv7G5iUvXV  8 \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-6baebbe06e92c73d2cc41e2cd5eb358a07f34420 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-6baebbe06e92c73d2cc41e2cd5eb358a07f34420 new file mode 100644 index 00000000..27c91af0 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-6baebbe06e92c73d2cc41e2cd5eb358a07f34420 differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-72aacd2d82d3c3fa750807ad1138e6a566996f04 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-72aacd2d82d3c3fa750807ad1138e6a566996f04 new file mode 100644 index 00000000..6a639ac1 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-72aacd2d82d3c3fa750807ad1138e6a566996f04 @@ -0,0 +1 @@ +qP\Ù!J],ʥ t @:0.sd$X, bcv7G \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-7a28ce2dfca01ededa28577f0397be089cbb5193 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-7a28ce2dfca01ededa28577f0397be089cbb5193 new file mode 100644 index 00000000..d83fe205 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-7a28ce2dfca01ededa28577f0397be089cbb5193 @@ -0,0 +1 @@ + <`!J],ʥ t @:0sd$X, &cv7G5iUIl ',w/3Oc \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-87b6b9d7de833ac9c1b42049a591b84b9cd4a937 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-87b6b9d7de833ac9c1b42049a591b84b9cd4a937 new file mode 100644 index 00000000..3af93d2f --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-87b6b9d7de833ac9c1b42049a591b84b9cd4a937 @@ -0,0 +1 @@ + <`!J],ʥ t @:0sd$X݇ t @:0sd$X, w/7Oc \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-91508c7a3d06501d324f4769f702818dc882cb53 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-91508c7a3d06501d324f4769f702818dc882cb53 new file mode 100644 index 00000000..d0354aa9 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-91508c7a3d06501d324f4769f702818dc882cb53 @@ -0,0 +1 @@ +^V]V!7~Qm'\k QZ#8080o¤]FZsTAO"rybzgN"< @i 8%mZfh:"#: \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-9991f110a0c43a7b68c355be88fbcb4f858ba523 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-9991f110a0c43a7b68c355be88fbcb4f858ba523 new file mode 100644 index 00000000..e6b99ec5 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-9991f110a0c43a7b68c355be88fbcb4f858ba523 @@ -0,0 +1 @@ +^V]V@!7~Qm'@k QZ#80o¤]FZsTAO"rybzgN"< @i 8%mZfh:"#: \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-a6688e26770eba930d1f4450628284f7e54a188e b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-a6688e26770eba930d1f4450628284f7e54a188e new file mode 100644 index 00000000..fb9bb2b6 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-a6688e26770eba930d1f4450628284f7e54a188e @@ -0,0 +1 @@ + <`!J],ʥ t @:0sd$X, bcv7G ',w/3Oc \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-b91786eba970d3f88e028504a52d00df2767ae30 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-b91786eba970d3f88e028504a52d00df2767ae30 new file mode 100644 index 00000000..b29166f4 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-b91786eba970d3f88e028504a52d00df2767ae30 @@ -0,0 +1 @@ + <`!J],ʥ t @:0sd$X, bcv7G5iUI*l ',w/@ c \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-c01c76683093e04c68ebde60e0db25493521887c b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-c01c76683093e04c68ebde60e0db25493521887c new file mode 100644 index 00000000..f3b2059e --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-c01c76683093e04c68ebde60e0db25493521887c @@ -0,0 +1 @@ + <`!J],ʥ t V  3@:0sdV  3 \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-dd1bb74569f01fb452bc39370230fb8fe2fac7e2 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-dd1bb74569f01fb452bc39370230fb8fe2fac7e2 new file mode 100644 index 00000000..95f4c4bc --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-dd1bb74569f01fb452bc39370230fb8fe2fac7e2 @@ -0,0 +1 @@ + <`!J],ʥ t @:0sd$X, bcv7G5"ryb,w/3Oc \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-f1916a406490728f771aae506c3e09c8b2cd446b b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-f1916a406490728f771aae506c3e09c8b2cd446b new file mode 100644 index 00000000..839494b0 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-f1916a406490728f771aae506c3e09c8b2cd446b @@ -0,0 +1 @@ +^V]V@!7~Qm'\k QZ#80o¤]FZsTAO"rybzgN"< @ikRy,`9(dd%vXV  8%mZfh:"#: \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-f90880b9a49f13e75778cbf94d7d47feec11f941 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-f90880b9a49f13e75778cbf94d7d47feec11f941 new file mode 100644 index 00000000..f64c0a6e --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/crash-f90880b9a49f13e75778cbf94d7d47feec11f941 @@ -0,0 +1 @@ + <`!J],ʥ t @:0sd$X/7Oc \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/draft-koch-eddsa-for-openpgp-00.rfc4880.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/draft-koch-eddsa-for-openpgp-00.rfc4880.pgp new file mode 100644 index 00000000..6a4faad0 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/draft-koch-eddsa-for-openpgp-00.rfc4880.pgp @@ -0,0 +1 @@ +^V]V@!7~Qm'\k QZ#80o¤]FZsTAO"rybzgN"< @ikRy,`9(dd%vXV  8%mZfh:"#: \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/draft-koch-eddsa-for-openpgp-00.rfc4880.pgp.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/draft-koch-eddsa-for-openpgp-00.rfc4880.pgp.asc new file mode 100644 index 00000000..c26301d4 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/draft-koch-eddsa-for-openpgp-00.rfc4880.pgp.asc @@ -0,0 +1,8 @@ +-----BEGIN PGP MESSAGE----- + +wV4DVhfd8F3MVr8SAQdAphsh4jeDfsoaUW2HJ9Lnw9nkDlzPzWsDC1ES/Vojvzgw +jm/CpF1GA55aHXOGVEFPrIGVInIc/HliApN6/ONn7oPxz/zdz06cCCKfPBT/CQeh +0kABae4Oa1KSeboCqhXgLGDAGhY5gSiYZBdkJYt2nlgOjlYHzuXY/I7ZDAjdDSA4 +GPIWJW0F8FqxoWa0aDoiIzqK +=BXMn +-----END PGP MESSAGE----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/password.rfc4880.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/password.rfc4880.pgp new file mode 100644 index 00000000..6d52ab20 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/password.rfc4880.pgp @@ -0,0 +1 @@ + <`!J],ʥ t @:0sd$X, bcv7G5iUIl ',w/7Oc \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/password.rfc4880.pgp.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/password.rfc4880.pgp.asc new file mode 100644 index 00000000..ca9651e4 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/password.rfc4880.pgp.asc @@ -0,0 +1,7 @@ +-----BEGIN PGP MESSAGE----- + +wx4EBwMC0Q0Zjq+j7jxgsSFKXRX3CLUsyqWHDHTTDLbSQAE6qDCRu3Nks7Gfohbl +JFiTnfrdHiwMArdiY7N2NwHuR4eDARuNNWlVSezmpmwFICeKLL+9o3eX0S83Fk8S +1mM= +=N/kL +-----END PGP MESSAGE----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/rfc4880.rfc4880.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/rfc4880.rfc4880.pgp new file mode 100644 index 00000000..1ebdec4a Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/rfc4880.rfc4880.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/rfc4880.rfc4880.pgp.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/rfc4880.rfc4880.pgp.asc new file mode 100644 index 00000000..8b7de1df --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage/rfc4880.rfc4880.pgp.asc @@ -0,0 +1,17 @@ +-----BEGIN PGP MESSAGE----- + +wcFMA6SJex80gcWaAQ/8C4tRTyBQhmtBERKS0VHc/nb7cS2dbr7XSMpvk53Fj9Se +qWgJloepmkFea0OGy+ectRwGFWj3Aj0bdChRbi3ipfX1QXdhAbdBTb3+GlfPkr6X +WfywYYMbKB2eoDpSw5sdgvN3TKOlSL/8snGtrkZYy3VoS6xZ9RRhrmz9KEw6q2vc +APz4ldOOMmYTgDT8o8gjqqc+7hK2Ac+jdIq6Jtmrs49yxONU92UL8ormJbGpOFVB ++tAUIgFHib/0qc6ch5KhcXJUCT/jt7cn+BoLk4U2ns9mBxwnYJ+vnxzFrJxgySY0 +TOOGxmuPQOCMZfOxme0HUROxu5xiSM6PRLWilL6YRyw3IXekfVGNeFHnsF/Rxx7c +3v9cvnsDQpGE9qRsgtxcvCGJkKnPNFRQPA/vpXB/GhrBtGLSpTMKHxbHyPsb10ZP +IN5aR37QqN7LLu1vlFdjz37CL0ib4pHEH1FvpsaY9l+nzv3eltF2U7aFHHdGQd7E +mmihSbdzRTYys2yX2P/mYVZo2j/GciGUtd9ucllouTRlBEL1IEgBSeSuaH9xYscN +u4rTDgezBS8WF9/0T8elmeTjk2RRojRGKt98HFl/YU8V/MLTDS/c7Hl6U9FIpGrM +QIFzunmf4npwrgAEH+spzl6qVYygEqDHTt1K05eEO4ZxoHBwTd9dTgRtj/b35lHS +QAHc37MCFlJVNma77AinyVs17c2kgUP+gV5Liwt07kSRca7hzYJgYDvQi2hf08pP +abmx0ChGu+JRUAvkFD7k120= +=CaPm +-----END PGP MESSAGE----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedPassphrase/crash-ab461f6b8a6842a473257a2561c1fbdf91bdfe77 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedPassphrase/crash-ab461f6b8a6842a473257a2561c1fbdf91bdfe77 new file mode 100644 index 00000000..e69de29b diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedPassphrase/crash-e15f6d2aaf7124b3412b4ba69928aa087a2c37f3 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedPassphrase/crash-e15f6d2aaf7124b3412b4ba69928aa087a2c37f3 new file mode 100644 index 00000000..45518ca5 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedPassphrase/crash-e15f6d2aaf7124b3412b4ba69928aa087a2c37f3 @@ -0,0 +1,2 @@ + +/ \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-1a5db5bb461c354c040c6aff91bbf119661b19e8 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-1a5db5bb461c354c040c6aff91bbf119661b19e8 new file mode 100644 index 00000000..e6b455b2 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-1a5db5bb461c354c040c6aff91bbf119661b19e8 @@ -0,0 +1 @@ +] M \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-5088fe58b92db5e48f739e69e327d0b502f76d1a b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-5088fe58b92db5e48f739e69e327d0b502f76d1a new file mode 100644 index 00000000..5b487190 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-5088fe58b92db5e48f739e69e327d0b502f76d1a @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-6ef3f0fcd6325e34a205ca8e9f8ed2a648072776 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-6ef3f0fcd6325e34a205ca8e9f8ed2a648072776 new file mode 100644 index 00000000..2b36e1be --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-6ef3f0fcd6325e34a205ca8e9f8ed2a648072776 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-74ee2de3da27436407d779d58cc9256be185fede b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-74ee2de3da27436407d779d58cc9256be185fede new file mode 100644 index 00000000..4edaa423 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-74ee2de3da27436407d779d58cc9256be185fede @@ -0,0 +1,2 @@ + +] \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-a1a7715c7596c77b892dc6d4debb7c108ca4ef97 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-a1a7715c7596c77b892dc6d4debb7c108ca4ef97 new file mode 100644 index 00000000..39583112 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-a1a7715c7596c77b892dc6d4debb7c108ca4ef97 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-ec9f11fde2456714178aecb8b78f181216a8150f b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-ec9f11fde2456714178aecb8b78f181216a8150f new file mode 100644 index 00000000..6d51bd5d --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-ec9f11fde2456714178aecb8b78f181216a8150f @@ -0,0 +1,3 @@ + +] +] \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/ParseCertFuzzTestInputs/parseOpenPGPCert/alice.cert b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/ParseCertFuzzTestInputs/parseOpenPGPCert/alice.cert new file mode 100644 index 00000000..2d75333f --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/ParseCertFuzzTestInputs/parseOpenPGPCert/alice.cert @@ -0,0 +1,21 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: DDBA EEBD D4D9 CB55 DDF9 136C 48D8 2FF4 E30E 4BB4 +Comment: Alice + +xjMEaGfc0BYJKwYBBAHaRw8BAQdATOdV6wukmqSavJGlnqhkk0fvPzhNnzvp3sv5 +gMq3BzXNHEFsaWNlIDxhbGljZUBwZ3BhaW5sZXNzLm9yZz7CnwQTFgoAUQWCaGfc +0AkQSNgv9OMOS7QWoQTduu691NnLVd35E2xI2C/04w5LtAKbAQUVCgkICwUWAgMB +AAQLCQgHCScJAQkCCQMIAQKeCQWJCWYBgAKZAQAAqrgBAL3xEcgVuzmnJ5akqKaM +/csVnquuiisFwxyLM8A+pcSNAP43kNKf9Ml4p6V3ooIHr1bYpKPgEF0+9pssbpxG +r7/wBs4zBGhn3NAWCSsGAQQB2kcPAQEHQD1D735u8pIjW+gOr6tvvIqMJUpUbiM7 +WqP/BM8Xk+RJwsAYBBgWCgCKBYJoZ9zQCRBEVyYx8Um7ABahBBUJTJ3MN3zifxAZ +n0RXJjHxSbsAApsCXyAEGRYKAAYFgmhn3NAACgkQRFcmMfFJuwBMOQEA5EoBlNRO +q5hztg049YzV5A/JN658scYz+ukS4sIS1WMA/RcFkOZF8DNqhYXlm7jDe7IIRLfk +g0B3O7YMIJ1qaRMAAABjRwEAzOJ3DqNOa43xVQGkxSduiMZvDCth5xpfn0E+98Mg +yRIA/1P4Pm+26aZ0heLHLmTFEgPcUKMit2+Sebjan4/psaYAzjgEaGfc0BIKKwYB +BAGXVQEFAQEHQHRJlEs915TxWvrvCNISbvkQLiTtEo+uPmZb2sBrEIRXAwEIB8J4 +BBgWCgAqBYJoZ9zQCRBqhz9va/rd1hahBOfnmVV9LWWfy/UZPWqHP29r+t3WApsM +AADktwD/TSz5ZK5WFaaLSzpIwyA2U9XvgUvGD+5bSbanXsYU9LwA/1NWshgcBfDM +RoboZGPwWIikfRUOatGph4IRj/5UZmIJ +=hJD/ +-----END PGP PUBLIC KEY BLOCK----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/ParseCertFuzzTestInputs/parseOpenPGPCert/alice_pub.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/ParseCertFuzzTestInputs/parseOpenPGPCert/alice_pub.asc new file mode 100644 index 00000000..2d75333f --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/ParseCertFuzzTestInputs/parseOpenPGPCert/alice_pub.asc @@ -0,0 +1,21 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: DDBA EEBD D4D9 CB55 DDF9 136C 48D8 2FF4 E30E 4BB4 +Comment: Alice + +xjMEaGfc0BYJKwYBBAHaRw8BAQdATOdV6wukmqSavJGlnqhkk0fvPzhNnzvp3sv5 +gMq3BzXNHEFsaWNlIDxhbGljZUBwZ3BhaW5sZXNzLm9yZz7CnwQTFgoAUQWCaGfc +0AkQSNgv9OMOS7QWoQTduu691NnLVd35E2xI2C/04w5LtAKbAQUVCgkICwUWAgMB +AAQLCQgHCScJAQkCCQMIAQKeCQWJCWYBgAKZAQAAqrgBAL3xEcgVuzmnJ5akqKaM +/csVnquuiisFwxyLM8A+pcSNAP43kNKf9Ml4p6V3ooIHr1bYpKPgEF0+9pssbpxG +r7/wBs4zBGhn3NAWCSsGAQQB2kcPAQEHQD1D735u8pIjW+gOr6tvvIqMJUpUbiM7 +WqP/BM8Xk+RJwsAYBBgWCgCKBYJoZ9zQCRBEVyYx8Um7ABahBBUJTJ3MN3zifxAZ +n0RXJjHxSbsAApsCXyAEGRYKAAYFgmhn3NAACgkQRFcmMfFJuwBMOQEA5EoBlNRO +q5hztg049YzV5A/JN658scYz+ukS4sIS1WMA/RcFkOZF8DNqhYXlm7jDe7IIRLfk +g0B3O7YMIJ1qaRMAAABjRwEAzOJ3DqNOa43xVQGkxSduiMZvDCth5xpfn0E+98Mg +yRIA/1P4Pm+26aZ0heLHLmTFEgPcUKMit2+Sebjan4/psaYAzjgEaGfc0BIKKwYB +BAGXVQEFAQEHQHRJlEs915TxWvrvCNISbvkQLiTtEo+uPmZb2sBrEIRXAwEIB8J4 +BBgWCgAqBYJoZ9zQCRBqhz9va/rd1hahBOfnmVV9LWWfy/UZPWqHP29r+t3WApsM +AADktwD/TSz5ZK5WFaaLSzpIwyA2U9XvgUvGD+5bSbanXsYU9LwA/1NWshgcBfDM +RoboZGPwWIikfRUOatGph4IRj/5UZmIJ +=hJD/ +-----END PGP PUBLIC KEY BLOCK----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed25519Legacy_v4.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed25519Legacy_v4.pgp new file mode 100644 index 00000000..fc43a52a Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed25519Legacy_v4.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed25519_v4.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed25519_v4.pgp new file mode 100644 index 00000000..38aefdee --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed25519_v4.pgp @@ -0,0 +1 @@ +&hpx "^heh( \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed25519_v6.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed25519_v6.pgp new file mode 100644 index 00000000..52216d85 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed25519_v6.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed448_v4.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed448_v4.pgp new file mode 100644 index 00000000..af727ca9 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed448_v4.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed448_v6.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed448_v6.pgp new file mode 100644 index 00000000..4c7476f1 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/ed448_v6.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP256ECDH_v4.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP256ECDH_v4.pgp new file mode 100644 index 00000000..b05dddb9 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP256ECDH_v4.pgp @@ -0,0 +1 @@ +Vhp*H=$;*nȵ(cy4 ,sU;ؚ#!AgjL<B7? \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP256ECDH_v6.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP256ECDH_v6.pgp new file mode 100644 index 00000000..f61b3585 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP256ECDH_v6.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP256ECDSA_v4.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP256ECDSA_v4.pgp new file mode 100644 index 00000000..2d5eea3e --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP256ECDSA_v4.pgp @@ -0,0 +1,2 @@ +Rhp*H=-$5? xH4t?%[sTpXi +8G:I)I/a"yA9 \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP256ECDSA_v6.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP256ECDSA_v6.pgp new file mode 100644 index 00000000..78b3e6c6 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP256ECDSA_v6.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP384ECDH_v4.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP384ECDH_v4.pgp new file mode 100644 index 00000000..eb69b803 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP384ECDH_v4.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP384ECDH_v6.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP384ECDH_v6.pgp new file mode 100644 index 00000000..fcd9418f Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP384ECDH_v6.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP384ECDSA_v4.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP384ECDSA_v4.pgp new file mode 100644 index 00000000..753af46d Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP384ECDSA_v4.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP384ECDSA_v6.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP384ECDSA_v6.pgp new file mode 100644 index 00000000..e64e6b23 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP384ECDSA_v6.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP521ECDH_v4.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP521ECDH_v4.pgp new file mode 100644 index 00000000..c2dba861 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP521ECDH_v4.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP521ECDH_v6.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP521ECDH_v6.pgp new file mode 100644 index 00000000..c9c82dee Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP521ECDH_v6.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP521ECDSA_v4.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP521ECDSA_v4.pgp new file mode 100644 index 00000000..66a16898 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP521ECDSA_v4.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP521ECDSA_v6.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP521ECDSA_v6.pgp new file mode 100644 index 00000000..e751b309 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/nistP521ECDSA_v6.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-40b0e946bfad779a720ffb4ddf3afda127c381e0 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-40b0e946bfad779a720ffb4ddf3afda127c381e0 new file mode 100644 index 00000000..6e8f29a8 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-40b0e946bfad779a720ffb4ddf3afda127c381e0 differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-6ff0478f8c84828619d721a9c582cf0dc048198d b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-6ff0478f8c84828619d721a9c582cf0dc048198d new file mode 100644 index 00000000..4ad30dda Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-6ff0478f8c84828619d721a9c582cf0dc048198d differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-972998632851a93af5c647ad0f8f684afbb6e788 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-972998632851a93af5c647ad0f8f684afbb6e788 new file mode 100644 index 00000000..ba689842 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-972998632851a93af5c647ad0f8f684afbb6e788 @@ -0,0 +1 @@ +vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-b2703b347fec497f13d319cfd5e337052683f853 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-b2703b347fec497f13d319cfd5e337052683f853 new file mode 100644 index 00000000..ed86d1e5 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-b2703b347fec497f13d319cfd5e337052683f853 differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-b47757e7135bbaf31049992ed13461a1c95255c9 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-b47757e7135bbaf31049992ed13461a1c95255c9 new file mode 100644 index 00000000..5fc4ff51 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-b47757e7135bbaf31049992ed13461a1c95255c9 differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-fd8f91587a20a22513ee536aec3411052e5b3217 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-fd8f91587a20a22513ee536aec3411052e5b3217 new file mode 100644 index 00000000..c31520de --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/parsePublicKeyPacket/crash-fd8f91587a20a22513ee536aec3411052e5b3217 @@ -0,0 +1 @@ ++ \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/rsa2048_v4.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/rsa2048_v4.pgp new file mode 100644 index 00000000..05470088 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/rsa2048_v4.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/rsa2048_v6.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/rsa2048_v6.pgp new file mode 100644 index 00000000..18aacd39 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/rsa2048_v6.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/rsa4096_v4.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/rsa4096_v4.pgp new file mode 100644 index 00000000..1fd6ffc9 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/rsa4096_v4.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/rsa4096_v6.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/rsa4096_v6.pgp new file mode 100644 index 00000000..fa112b0c Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/rsa4096_v6.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/x25519Legacy_v4.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/x25519Legacy_v4.pgp new file mode 100644 index 00000000..45f98c5b --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/x25519Legacy_v4.pgp @@ -0,0 +1,2 @@ +8hp ++U@VIЈ樣1]ُa_l4J  \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/x25519_v4.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/x25519_v4.pgp new file mode 100644 index 00000000..6956e05c --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/x25519_v4.pgp @@ -0,0 +1 @@ +&hp^ouGɤo"C8|ChpEN.-?FBM_-'ň[kqnQԪ&[mY \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/x448_v6.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/x448_v6.pgp new file mode 100644 index 00000000..a71f3a73 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/PublicKeyPacketFuzzTestInputs/x448_v6.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed25519Legacy_v4.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed25519Legacy_v4.key.pgp new file mode 100644 index 00000000..4a8fecd6 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed25519Legacy_v4.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed25519_v4.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed25519_v4.key.pgp new file mode 100644 index 00000000..5e4a6396 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed25519_v4.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed25519_v6.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed25519_v6.key.pgp new file mode 100644 index 00000000..201a1c6b Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed25519_v6.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed448_v4.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed448_v4.key.pgp new file mode 100644 index 00000000..738ca3a1 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed448_v4.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed448_v6.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed448_v6.key.pgp new file mode 100644 index 00000000..05677c5a Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/ed448_v6.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP256ECDH_v4.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP256ECDH_v4.key.pgp new file mode 100644 index 00000000..1473e093 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP256ECDH_v4.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP256ECDH_v6.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP256ECDH_v6.key.pgp new file mode 100644 index 00000000..359c0a71 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP256ECDH_v6.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP256ECDSA_v4.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP256ECDSA_v4.key.pgp new file mode 100644 index 00000000..60621c62 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP256ECDSA_v4.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP256ECDSA_v6.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP256ECDSA_v6.key.pgp new file mode 100644 index 00000000..41a05262 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP256ECDSA_v6.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP384ECDH_v4.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP384ECDH_v4.key.pgp new file mode 100644 index 00000000..d0c46bc1 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP384ECDH_v4.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP384ECDH_v6.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP384ECDH_v6.key.pgp new file mode 100644 index 00000000..6ad434aa Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP384ECDH_v6.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP384ECDSA_v4.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP384ECDSA_v4.key.pgp new file mode 100644 index 00000000..7268e0ab Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP384ECDSA_v4.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP384ECDSA_v6.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP384ECDSA_v6.key.pgp new file mode 100644 index 00000000..665e65bb Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP384ECDSA_v6.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP521ECDH_v4.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP521ECDH_v4.key.pgp new file mode 100644 index 00000000..bd723fb7 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP521ECDH_v4.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP521ECDH_v6.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP521ECDH_v6.key.pgp new file mode 100644 index 00000000..e8a45805 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP521ECDH_v6.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP521ECDSA_v4.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP521ECDSA_v4.key.pgp new file mode 100644 index 00000000..de6515e8 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP521ECDSA_v4.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP521ECDSA_v6.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP521ECDSA_v6.key.pgp new file mode 100644 index 00000000..d685854e Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/nistP521ECDSA_v6.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-28f2677523ed3043117ea46f27bf8b9b990c4e3a b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-28f2677523ed3043117ea46f27bf8b9b990c4e3a new file mode 100644 index 00000000..7a5d881c Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-28f2677523ed3043117ea46f27bf8b9b990c4e3a differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-4fbc082c98d268e4495e09d40912053a9c08b896 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-4fbc082c98d268e4495e09d40912053a9c08b896 new file mode 100644 index 00000000..94423c97 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-4fbc082c98d268e4495e09d40912053a9c08b896 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-56fb7129479f381d7cfd4598b540d3b753730ffc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-56fb7129479f381d7cfd4598b540d3b753730ffc new file mode 100644 index 00000000..307e2ad8 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-56fb7129479f381d7cfd4598b540d3b753730ffc @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-6c04193b9d8991eec00fdef05735bfed376c0f6c b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-6c04193b9d8991eec00fdef05735bfed376c0f6c new file mode 100644 index 00000000..eb9f0fc5 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-6c04193b9d8991eec00fdef05735bfed376c0f6c @@ -0,0 +1 @@ +:: \ No newline at end of file diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-8eb418bf4e4721c572e13bd11313a1d29de247a9 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-8eb418bf4e4721c572e13bd11313a1d29de247a9 new file mode 100644 index 00000000..8d55b6be Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-8eb418bf4e4721c572e13bd11313a1d29de247a9 differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-e3411c8a800f1d8d38cd62027ff5c51f51ab5224 b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-e3411c8a800f1d8d38cd62027ff5c51f51ab5224 new file mode 100644 index 00000000..b5376825 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/parseSecretKeyPacket/crash-e3411c8a800f1d8d38cd62027ff5c51f51ab5224 differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/rsa2048_v4.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/rsa2048_v4.key.pgp new file mode 100644 index 00000000..2dbb1579 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/rsa2048_v4.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/rsa2048_v6.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/rsa2048_v6.key.pgp new file mode 100644 index 00000000..11a999d3 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/rsa2048_v6.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/rsa4096_v4.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/rsa4096_v4.key.pgp new file mode 100644 index 00000000..9b56e3e9 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/rsa4096_v4.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/rsa4096_v6.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/rsa4096_v6.key.pgp new file mode 100644 index 00000000..e9ae6fe3 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/rsa4096_v6.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x25519Legacy_v4.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x25519Legacy_v4.key.pgp new file mode 100644 index 00000000..582aed09 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x25519Legacy_v4.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x25519_v4.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x25519_v4.key.pgp new file mode 100644 index 00000000..c13d1b2b Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x25519_v4.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x25519_v6.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x25519_v6.key.pgp new file mode 100644 index 00000000..04cc1392 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x25519_v6.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x448_v4.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x448_v4.key.pgp new file mode 100644 index 00000000..44f5c11a Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x448_v4.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x448_v6.key.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x448_v6.key.pgp new file mode 100644 index 00000000..e9d7d88c Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SecretKeyPacketFuzzTestInputs/x448_v6.key.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/crash-32e33f4ab3ec144d7ecab9104c44ec3776939e2a b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/crash-32e33f4ab3ec144d7ecab9104c44ec3776939e2a new file mode 100644 index 00000000..b06f0124 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/crash-32e33f4ab3ec144d7ecab9104c44ec3776939e2a differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_ed25519.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_ed25519.asc new file mode 100644 index 00000000..c250b6cc --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_ed25519.asc @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +wnUEABYKACcFgmhs7vgJECL1fW9vQUTUFiEELgSiuyj9W99u41BmIvV9b29BRNQA +ALkiAQDRulwayys9tufqrCg+AGCTyBp0SZT9PBOiCk2iZSb4zgEAvc3R88D3LI0C +kmchJW/WW7JGsmrwO4EZIBu1alzkggk= +=w4js +-----END PGP SIGNATURE----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_ed25519.bin b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_ed25519.bin new file mode 100644 index 00000000..fb7ee5ce Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_ed25519.bin differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p256.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p256.asc new file mode 100644 index 00000000..c26be902 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p256.asc @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +wnUEABMKACcFgmhtFGwJEGTDz6W23cHoFiEE4bpPaE2vfK5LIsVuZMPPpbbdwegA +AFnfAQDRuwo60NzfBezQ4gE5AsE2oyqqK34bu5JAXH/CKjSGGgEAjUeMBsLy8lfA +HR+pPgEDJpiJnRpC2BTRpqCpzTRHpEc= +=9NaG +-----END PGP SIGNATURE----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p256.bin b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p256.bin new file mode 100644 index 00000000..02d5e26d Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p256.bin differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p384.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p384.asc new file mode 100644 index 00000000..f83af70b --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p384.asc @@ -0,0 +1,8 @@ +-----BEGIN PGP SIGNATURE----- + +wpUEABMKACcFgmhtFJIJEBxvr0D4OkYGFiEEB1IccXRzT2WMi+p2HG+vQPg6RgYA +AL2NAYD5aJwmYzB4TlroVOkurvhtahKeg0dlph8QQMIW/4w7UrqH4H2t8vzAD/x8 +0F8hGSQBgI+S7r856Oeo3v9o4abFEjKlKu/35+bAIIcqkfeqLNvsSbdMchC+Vzum +h2MD4u247A== +=fnfC +-----END PGP SIGNATURE----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p384.bin b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p384.bin new file mode 100644 index 00000000..963b6e39 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p384.bin differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p521.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p521.asc new file mode 100644 index 00000000..034597bb --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p521.asc @@ -0,0 +1,8 @@ +-----BEGIN PGP SIGNATURE----- + +wrkEABMKACcFgmhtFLMJECtToxFC+nyfFiEEeshC8VthZwiw1D6OK1OjEUL6fJ8A +AEGWAgkBupKqqpVZ20r0omF9mRa+lVf5y6XduSpBcUrpBVmB6ABjRPdNVc/4HNmB +Jiv2PwM4PJFncnyEMUwbfwtJ3X2TOocCCQGu6cRT25hYO7ShPgLQwOac7FoHpmor +xiMb7jCq3o3itJJJpRSWtTlhKFVH4FXwxih3lqnu54Lp+D7haDc4SuI2mA== +=eQOs +-----END PGP SIGNATURE----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p521.bin b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p521.bin new file mode 100644 index 00000000..25e08a56 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_nist-p521.bin differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_rsa4096.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_rsa4096.asc new file mode 100644 index 00000000..20112876 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_rsa4096.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +wsFzBAABCgAnBYJobRIHCRCtIGpQoDHbwhYhBHRAVPatZ4CR0z2XN60galCgMdvC +AAA5uw//e2P+RbXRAG36In7ngExbYns2lLxOPhQlDvYLDnr+lw2LyLTgtFJ++Ab0 +J3mBogu11mCuREgP7pc8A3okhRZIW4H655p+d9D3nAaxehRK5mVCZW4Y8i7OvOCa ++qsl+oM5MK8Buh2r/IqaTVeuVAZCK/Mfqh0uJtfTmyxIoxZhvJxJkWufDf0L6dop +gphKRpka/KklVawlQsgDxUHZ+xa398qjmqTaWjhYY7z9u8sCl6VX6eQ/2sJFGpKA +Xhtg4YJYewxt9dv5jdOHCzK/MhuMbg1G2P+ZKnWOE6R3kAfBMk5QCqRhgIZ7RovS ++JpeNvan9TYmhM5wdaOniTTEDlZ9chqHrEgXnaUP5T4TboDP8p74n/FJX7sNm/r0 +M9/FainfPjwYdUBj3ao3z5v8q/b3DBPUlqwAsgny7gTOx4KywErjk77G1iOID4Qi +T4KhIGgYsd6Wgwnj76H/7A1V17K8zOzQCIrpVHTSfANseHqF1WQtQCyFArUAW8MR +/aWZHa2iRyI+GvNE+iE+cjdhD63oEoSxb2Ol4ONvO+4PeqUk1xo9jYrQVgfK93QH +ExDq9NaQkx4/+qc7AMMfwIA+3/VuO+Rf2PnWo22mh50PrlvuP7hMOhHIPRwTWUPd +3ataR62uQ5tmOS32FhiLIiPoFhNKeSnm5KnlkO6SEiveMFXRKg0= +=ALLM +-----END PGP SIGNATURE----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_rsa4096.bin b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_rsa4096.bin new file mode 100644 index 00000000..8b04b4b1 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v4_rsa4096.bin differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v6_ed25519.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v6_ed25519.asc new file mode 100644 index 00000000..021a0c3d --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v6_ed25519.asc @@ -0,0 +1,8 @@ +-----BEGIN PGP SIGNATURE----- + +wpgGABsKAAAAKQWCaG0VOyKhBkFrbvbArCD35cGzhvXmkMZ5w0LLmSo55nMmtYsR +PnjqAAAAAPvQIA4Iq2K0v57sNFtWbQyeRybyrhs5mGF5xGdfrgLsXdTTeR9vYj0q +d7373twGVErwtoecYULB4K86RXkilEKBZBwbbvZY6uvpJmvqyZJcrQ6VlXnq9Vt1 +VADMXhMCt8jWDw== +=a2ih +-----END PGP SIGNATURE----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v6_ed25519.bin b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v6_ed25519.bin new file mode 100644 index 00000000..7bd1e7f4 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v6_ed25519.bin differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v6_ed448.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v6_ed448.asc new file mode 100644 index 00000000..f9cf84c4 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v6_ed448.asc @@ -0,0 +1,9 @@ +-----BEGIN PGP SIGNATURE----- + +wsAKBgAcCgAAACkFgmhtFU8ioQYLgQOeAuszvcsiDltlAphVQAz3y9UjzpCrpITi +ZTGXGQAAAABWhiAF9q3I54NfibfICvcMoFaGX39NFlt1PYut1zvX2DcQnHpDaQCe +rQ3VRR82lGzXJ8gKUqL1T7Jv4nBEe2+Hx/UkHKrMrvYc3oGg9WXAotH8lI8iEu+l +4iI8AJUaxSZcM55wFEQO+XW8OHScWDiza5pNkWPDEnulhoERmZOOWixDzW2DpJbp +BIRNeQKEa6n47uY/AA== +=/IGW +-----END PGP SIGNATURE----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v6_ed448.bin b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v6_ed448.bin new file mode 100644 index 00000000..a6c8f694 Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/SignatureFuzzTestInputs/verifyFuzzedSig/sig_v6_ed448.bin differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/generate.sh b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/generate.sh new file mode 100755 index 00000000..64963a44 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/generate.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +SOP=pgpainless-cli +USERID="Alice " +KEYSDIR="testKeys" +TESTDIR="EncryptedMessageFuzzingTestInputs/decryptFuzzedMessage" + +mkdir $KEYSDIR +mkdir -p $TESTDIR + +echo "Hello, World!" > $TESTDIR/msg +echo -n "sw0rdf1sh" > $TESTDIR/pass + +gen_profiles=$($SOP list-profiles generate-key | awk '{ sub(/:$/, "", $1); print $1 }') +enc_profiles=$($SOP list-profiles encrypt | awk '{ sub(/:$/, "", $1); print $1 }') + + +for p in $gen_profiles; do + $SOP generate-key --profile=$p "$USERID" > $KEYSDIR/$p.key.asc + $SOP extract-cert < $KEYSDIR/$p.key.asc > $KEYSDIR/$p.cert.asc + $SOP dearmor < $KEYSDIR/$p.cert.asc > $KEYSDIR/$p.cert.pgp + + for m in $enc_profiles; do + $SOP encrypt --profile=$m $KEYSDIR/$p.cert.asc < $TESTDIR/msg > $TESTDIR/$p.$m.pgp.asc + $SOP dearmor < $TESTDIR/$p.$m.pgp.asc > $TESTDIR/$p.$m.pgp + done +done + +for m in $enc_profiles; do + $SOP encrypt --profile=$m --with-password=$TESTDIR/pass < $TESTDIR/msg > $TESTDIR/password.$m.pgp.asc + $SOP dearmor < $TESTDIR/password.$m.pgp.asc > $TESTDIR/password.$m.pgp +done + +rm $TESTDIR/pass $TESTDIR/msg diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/draft-koch-eddsa-for-openpgp-00.cert.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/draft-koch-eddsa-for-openpgp-00.cert.asc new file mode 100644 index 00000000..a41e9049 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/draft-koch-eddsa-for-openpgp-00.cert.asc @@ -0,0 +1,21 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: 84EA 2DE1 DF87 684D C4F1 4C4F 8D97 A0EB 70CC C181 +Comment: Alice + +mDMEaG5OBxYJKwYBBAHaRw8BAQdAbeZUgAIwxA8HtMUEV01uXdjevE5PDWChinJ9 +mEdrz/K0HEFsaWNlIDxhbGljZUBwZ3BhaW5sZXNzLm9yZz7ClQQTFgoARwWCaG5O +BwkQjZeg63DMwYEWIQSE6i3h34doTcTxTE+Nl6DrcMzBgQKeAQKbAQUWAgMBAAQL +CQgHBRUKCQgLBYkJZgGAApkBAAAXhAEApW8e4Vofp4aS9kRchjZBlOjUkTgd24jI +9Bnc12+wswkA/3QQkdJPzlCOAhsA6JExV8pFXCPU5oOXTxeTJU8mdwUNuDMEaG5O +BxYJKwYBBAHaRw8BAQdATuMzSZ89y7XR8wJXn5l+dGcUsd0Z1KHWh3G4myfPQvXC +wBUEGBYKAH0FgmhuTgcCngECmwIFFgIDAQAECwkIBwUVCgkIC18gBBkWCgAGBYJo +bk4HAAoJEBktzDv5fvLT1hsBALtHPeLKzbjFyHb7EXC6zTJd5l9cpcgKICnIlGk5 +QJMiAQDgRe8o34sJEVSYKXpJuuJ88LONBNDm+iWxGP7f6ESKCwAKCRCNl6DrcMzB +gQmvAP40Ow7gskdm9W0e/f7XIPeHF+BkjGmL6dY446J7tmykjAD/ZkMpKEZyaXi1 +pKZfhWIKgLc1Z8utFPPcQMXlmnRTaQS4OARobk4HEgorBgEEAZdVAQUBAQdAliH3 +1osodetlQ+fAbMCKISjrQ+O2djpkY8lEPgkAdW8DAQgHwnUEGBYKAB0FgmhuTgcC +ngECmwwFFgIDAQAECwkIBwUVCgkICwAKCRCNl6DrcMzBgbMUAQCuu4RprvUFBCNG +lbWasJfuVeJOhbiZtLblkWt5ZvvG4wEAsn932ol2eX3rK4ri5h6L7msqRBMaKIHu +2egrKBc8igs= +=6VYt +-----END PGP PUBLIC KEY BLOCK----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/draft-koch-eddsa-for-openpgp-00.cert.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/draft-koch-eddsa-for-openpgp-00.cert.pgp new file mode 100644 index 00000000..b20f645f Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/draft-koch-eddsa-for-openpgp-00.cert.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/draft-koch-eddsa-for-openpgp-00.key.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/draft-koch-eddsa-for-openpgp-00.key.asc new file mode 100644 index 00000000..c94ecb84 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/draft-koch-eddsa-for-openpgp-00.key.asc @@ -0,0 +1,23 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- +Comment: 84EA 2DE1 DF87 684D C4F1 4C4F 8D97 A0EB 70CC C181 +Comment: Alice + +lFgEaG5OBxYJKwYBBAHaRw8BAQdAbeZUgAIwxA8HtMUEV01uXdjevE5PDWChinJ9 +mEdrz/IAAP94BrURAVogP3wUtGpL14lIAQYANMgeUExwfYQay+t+Ygx8tBxBbGlj +ZSA8YWxpY2VAcGdwYWlubGVzcy5vcmc+wpUEExYKAEcFgmhuTgcJEI2XoOtwzMGB +FiEEhOot4d+HaE3E8UxPjZeg63DMwYECngECmwEFFgIDAQAECwkIBwUVCgkICwWJ +CWYBgAKZAQAAF4QBAKVvHuFaH6eGkvZEXIY2QZTo1JE4HduIyPQZ3NdvsLMJAP90 +EJHST85QjgIbAOiRMVfKRVwj1OaDl08XkyVPJncFDZxYBGhuTgcWCSsGAQQB2kcP +AQEHQE7jM0mfPcu10fMCV5+ZfnRnFLHdGdSh1odxuJsnz0L1AAEAyWlKBTvKIubB +l6kx0RU8uWSChrndM8ST8SAF4jvjqhoQAsLAFQQYFgoAfQWCaG5OBwKeAQKbAgUW +AgMBAAQLCQgHBRUKCQgLXyAEGRYKAAYFgmhuTgcACgkQGS3MO/l+8tPWGwEAu0c9 +4srNuMXIdvsRcLrNMl3mX1ylyAogKciUaTlAkyIBAOBF7yjfiwkRVJgpekm64nzw +s40E0Ob6JbEY/t/oRIoLAAoJEI2XoOtwzMGBCa8A/jQ7DuCyR2b1bR79/tcg94cX +4GSMaYvp1jjjonu2bKSMAP9mQykoRnJpeLWkpl+FYgqAtzVny60U89xAxeWadFNp +BJxdBGhuTgcSCisGAQQBl1UBBQEBB0CWIffWiyh162VD58BswIohKOtD47Z2OmRj +yUQ+CQB1bwMBCAcAAP9jokbt/Vs+sVFbY9pcnn/Umb/OpzNViUHmrPToDFt7yBLr +wnUEGBYKAB0FgmhuTgcCngECmwwFFgIDAQAECwkIBwUVCgkICwAKCRCNl6DrcMzB +gbMUAQCuu4RprvUFBCNGlbWasJfuVeJOhbiZtLblkWt5ZvvG4wEAsn932ol2eX3r +K4ri5h6L7msqRBMaKIHu2egrKBc8igs= +=7H8m +-----END PGP PRIVATE KEY BLOCK----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/rfc4880.cert.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/rfc4880.cert.asc new file mode 100644 index 00000000..1e0a7192 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/rfc4880.cert.asc @@ -0,0 +1,87 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: 10BE 2EEB 684A E5CA 9849 BCE1 1F4A 7593 552C AD28 +Comment: Alice + +mQINBGhuTgcBEADBHeYUkuPBmTu/bUMmw/So8vg9CPv5o4NqSfbutZos+DyPtUa3 +dYLCrRCj/O0pHThHdQBI7L9NGnIgbZ5kwDN4GchIOL0L/1KU6Ew9jz8sAiNuSk8v +IMiIIlDUG8T96zbHlsf18j2p8ILaaJZfXGp/cjGLoayleBd5ToE+yEYbg1fxQ4cL +Xhz7cexW7JPFA3CjsBw6VIEaXuPJ2yoo390xBD42ztmekZ5FFV771EoOtzTsVCuD +irV81TDP7/gf0oUPoNykM/Qz/REmler4KOzfheNDrMRs6XWAcf6ODpYDGgi3LCZa +isPUgJj16VBPDG6ptw7OLsghCMMIewTHMCWYuea1n0qih5oLO/5gISKzWBHhA/JA +WEAsaheSWDxZQO81jWxs7szN4QmCLutReT8b7DnkLoGitmVxlXIXlJuGDi9Hnaev +9blXDrOBWxvbYULwajzxX+gZ0nfDZkKADFYybKAdRzfouoDmqN2yin6kVdHwTtBg +6UbWcgz6G5PbDK1F3wE3vnShoBL9biAxxT8zfB4C/l/NOOC1i4/e1ZVmpmjGmmzv +az9y64W3JhHL8LF98z4ISw0VehT3E6CEMF5icCjIv1xpzqvNuR/iC1iW4G82xY8h +PZGsP3rI05/UVFTd2UrzvswYxyOuab6ZmLCRx2rKkXQqHAm9ZLjVlUDXOwARAQAB +tBxBbGljZSA8YWxpY2VAcGdwYWlubGVzcy5vcmc+wsGTBBMBCgBHBYJobk4LCRAf +SnWTVSytKBYhBBC+LutoSuXKmEm84R9KdZNVLK0oAp4BApsBBRYCAwEABAsJCAcF +FQoJCAsFiQlmAYACmQEAAJa2EACqxSbXi4pO/umaYpH9bXxDAA81GIPBGN0jBQqE +upj/akABS69o30B/Loocr/np8uShofvrR+4KuyaQGq5pEmhXmZToe0BjK8I3e5kG +c2Dj6LkoR6z+UTKIxqS+WtJzMtMOV7bXeyQ7aHIiBol/s6vV/Mn93PEidewv4hKE +T+CuHzDatzn5f41BsT9/d9+T2msO2Brfnvz3/Wv7wG0HOr0LiDvgr65KButA2RKL +z8lcsKaZLsf0kYV1Myvblo33iZd1zd+Msz4yTzDFT6doM59t4mbGlLUj8e27d/In +ur1+mXKbAGmRslmqd269VjFmcgeYr89UmTFQnsEx/eJypq/eOPzJQiOIhhrlQEBN +VOZ8udaormhrSelwSZGZh58Wy5ZsjpG9FF1VHT+ts1FoOm/9gbkm+mVAE+x/2FFw +qOEFzV8IrOxvAaq37gZE2Veg7/3jz3zyB8hr0dWGXUuL43cBsH4hK7aIHhz1epZm +9Z9E+eSf/EnRS3Z701igyVjXcNAXTKjqjzMpicTeKvTBnv7UstdDfLVr7tK+sZTK +Nnm8wO06Lgd9bQxIYUAX1mn5Msu8u0vIu2IsiJZga7KFyaoTEB+ZQ5r8sdgoG50i +BrsrxXboH8y1vhzhCGYzgVsScyyvWhb6GaWbN0QjQPLUGUSLz0yKmCcAevZFKsdy +hT/ZFbkCDQRobk4LARAAu4thy2HvL8YQiGzLH63f0AlmRMq9x6phK3xJbvkDekhe +Nqxazy8lWcxNV/c8PxGl97Itz5aNg/Z1/jG/VqgT8cQbWj8hodGJXfuPg/HBOf65 +WorhL5WG10uaGtfUtRPN5uqNfjzRk+Zed2N2F2iIIqly2HFh/OF22u6pqH6qKoHm +28uwwyelM7fr/6QUkRe87bJufjoyW8z/y9fQvNsY2pQSyO7ZYAWchspJqu1KVtKh +tYG/y48q5m6gAuCzlBbgvyvj9LUfrXMQTMfxlbvTvs6GllEdLQf4UI1Ki8WCWPgS +DOZvUOX40wOrZAxqGOmKZIaTX4LPcjvpZusJKQ6/3uBOLlWBZlMfBlskfv1lWFdo +GB+tSfmdSfapk4zz92Q4BAGvZiEaDbBqlsZCaRLpYXy/0xBGLH88jDwAr6MJsgFP +JZzW40dy7iDBtVfCUatquKMBEqtfLuEIEXC+ef0xUXieM+NTM3D0D5MoiyjordEX +sOlzz27xTUXEVXMJXkcxJljyuvYddAEiqZ72eCT7U30qm2LuXgxu1o1GzA3vntWB +C75UFPuI3mGxyejxmq2INScujLNndK8RUDMczjChZP8ajeLGIJbpJ/9gUq2WK5t7 +HdAQE0KWiYrloF9PNOsMA0wOBc83KIN6FoI2sWdUa8LIGr7HAC9T1yXjMq3OcMUA +EQEAAcLDkgQYAQoCPAWCaG5OHAKeAQKbAgUWAgMBAAQLCQgHBRUKCQgLwV0gBBkB +CgAGBYJobk4cAAoJEDNth2YpLd7yRgwQAK4O7oiQ6qr50mb1FlV0c5A1XvZ9Dp9T +cyrEy9kuwKTHq5fOrX7ST5iBOguI4bktYHSSV+CbFwo8ozS7UCxQHBJoHSf3qQ0Y +sKoYvpEQbQ85SHVe9vWUJeKjBULmvY8qXTwQk9pRo8H5yCqIdTtOupWrrHwJL1pQ +PTN4QUH2DWRBaWkMU1cmLhnfrHjUvr7K2QegPWMCYbWxhtaVcZf5+FZstaI03wg+ +lK0WrgZlNY3tmoORpWgYRUh1FhprynGSrgP5opt7APoYYrCkvjBVD8wu3tcOOUUn +lfN3upO8iMpG9favAkDE4OQhKujTcLn4s6gPLqdhWRnSnzpdUXuiVD30RSYPjvhq +b8ZEgd0SmR7P4w7O89Srk3jPafO505ofVleKkIltt/8yppXx1t4YaWOEE2ofAsJA +pKx6Wru++m0vYLNNqEvzcSOUhEhadieXqoS2Gf78W/Rq1GGiegVJXmAlkpYruzR3 +x3m/sGN5BVO0nN+vAcmzhW/6rY/zt3EP7DgLBwSOn882nF0uknhhkdH2npc/HIkB +yiUHoQpMDMyOIGPv+PTSwr1oZKqdOsZ2E1vejHemEMXJnePKiP9esDzwJwMSMXoE +8f71H5jPfQknQyG2t9CMYXGGwVgrWXAJ1mQyKMlFdUoo2fHGz35JEbxWjxDOlisv +gj9NxDiFyzjrAAoJEB9KdZNVLK0oPjUQAJlCpKrYnZTkNRthpCVNpBNQd2IYYzv8 +mu5lfWIL0ifH1uDp/nARyd1AXlK/k56bZl3h/XWTowe7EVCpgDXwBnsAhhjJ80Z/ +Zo04VT8Z2060Y4lb5r+eFClX9k4d5bVJTJG0oN22zlvlrnSljRARQUaFOsPugOK1 +p6Rq6qyniL4uY7qmsIPqymkwhems5FmzZOChx8woBBqVmbJ2MMb2DWCyGnB/2mXD +rKQaaMIQZ7QOiLYyT9P2pLOZyfTwliFnW3iyPkrt0FUiMKz4p9tuJylG7nvursov +hJ+fnQnWQT99WKc/MTla1bpBl3aCJFVpiPrFWgL+16YOra3aVRvguIm/j4wXjSiK +gi5xjJdm0GjEoMd58uvNnby0zO5H1Cm6r+Vl1F6oS+5RJL3Aprj11cOUufZyAx69 +1ddnY0pgQQScsK6Tfl87iVb8FH+Gb/GMVTFosUpp7VIobH/da5TEmEvBShdTmFpi +5cMKVYo0h+Csvh5mKeh1ALDRo8x0u0n4JAz01yP1Y5fdRGZOPtNCZRHI+eGou5OX +qA6alD3+evMlciEd4vueqLF/AUx46yLtJlOjCR1Cz1Ls3mNWcDOXZMPvu096acwb +prPpvx1XuVR/qYWzcix3Y69c81K8a8Y8OQOVZOKXjFfYtgfHt8eVA+O88BJjMirA +cXuLuJrFz7WYuQINBGhuThwBEACcFOrgQDl10L4laWqKenTQQ6ImcgiGU6V8c+6L +SvgDs27Y2nMvoSsAV8o292+alp48NHVYJiBHNQVQyLabJMxs9aOp90uy37HJ8DZ6 +6BQsPOoVRfkgHJv2MRjV5Xez/d0MMmryp6xFiDx+kKkHj3Dc04dMftwJPR5puW+2 +8wdXxWbVoGRr+ByhrSHVOTxRKpRG/24sa0k9QNTM7jQqBedFmZpPvny8b5KUwpXL +BtuwrhxGQ9FDHH0ZPfX8GoYKRqtNVCeznVz/EJMiM2L4Km7WBHSCJc5sfntLS4VR +Aha+PJaP+IRm/QhGYXzPYYTR/RL+Uog6FHXFnR4JVVhhRoSA9coDPm8Z5fNsQL8N +6iF9cdXBdaC8wyFsey8CgRLLBDzvs8XRruBrFuvLurFrl0mZXmFEstxdMKOK/6su +wMMty/G/Q5jF1exqqsW9Zj1GKYi/TJ5MN811uf9JZqI7+3hnMSw9Y8g3feLym+93 +23fBVh7sQZXXlvzcA6/tGWIjOOQI/irSbbNSrkL+seiT3DvCcb6AFpecCMvc0PlZ +E5FkfCzlTNjZA6F4AhRdTOzB06s1ri9HASf3UTf6p8nQgikxXm7SDAzVNWdwryCz +AnPFpAIVWNzUV39wK98VCWxCd7lyiwwgeLnjoqF7mQxPuT9ONhwhTu3pWWWImaYr +rS1mowARAQABwsFzBBgBCgAdBYJobk4dAp4BApsMBRYCAwEABAsJCAcFFQoJCAsA +CgkQH0p1k1UsrSiC2w/9FIMglUMf3DFympG0xRh8QRrYFEAMFYYc3WTyI+e4r1hy +Y1HnPws06snEbLy2G8XiovUgEt4LDVEPQLbKsiLPYLLD0F2AQ4yWolcP0sJcIjZw +eM8wsjc76F9jH+VoOV6W9aqciTZPIxzbRWvmJH4dkx5MZy+gpCzOjBXD4V+TE8jQ +y1dkN/3hNAbymF/MTAGmtN3Dz9wZDop16/sUcNWz/MnZ9zhrFvFlz/06OsEJBGDV +MDGxvekoi6HLyzmKtF2M3nuI+D7TXP1j5+PiLysHgF9xIdFUkmdxMyNrleMCqqSu +Y20amHjed9PWyIW+6QGxzM3JpSz1x22bMPwY2wnjLjv9/dU2NVED+v9rTvjE7w+Q +SIzcS6deoCbpXbdHag4aVe4ktGDn1qqSkkbFM6L6jCcstppSuBA7UGgVRK8l7yJE +BhiEwvEU4fOu7nKieadPuW+wK1Q3WK2cbSw+ya4QJoLIwhVGp7YmM0ZPpEJ5bNCy +T/xgvREhUQVFkfU1RjSNgUjcTligLKME+uVEkihjJb2aLORc691HyQOYK7uv8UuF +w6AKEnISA0xncWLD4v5HacWnMmXOdGsYzHx8U75KmiigUKL3QkorragCufCCkMCl +k3R34rdjKcJp22a2vrfriG21+1FqjAWCq3u4soalnYreRx/xkibXZ+pMhaTwnWI= +=yjFq +-----END PGP PUBLIC KEY BLOCK----- diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/rfc4880.cert.pgp b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/rfc4880.cert.pgp new file mode 100644 index 00000000..84c0756c Binary files /dev/null and b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/rfc4880.cert.pgp differ diff --git a/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/rfc4880.key.asc b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/rfc4880.key.asc new file mode 100644 index 00000000..6f9058d2 --- /dev/null +++ b/pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/testKeys/rfc4880.key.asc @@ -0,0 +1,168 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- +Comment: 10BE 2EEB 684A E5CA 9849 BCE1 1F4A 7593 552C AD28 +Comment: Alice + +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 +=jGAJ +-----END PGP PRIVATE KEY BLOCK----- diff --git a/version.gradle b/version.gradle index bc2515a4..2ba79714 100644 --- a/version.gradle +++ b/version.gradle @@ -7,9 +7,10 @@ allprojects { shortVersion = '1.7.7' isSnapshot = true javaSourceCompatibility = 11 - bouncyCastleVersion = '1.81' + bouncyCastleVersion = '1.82-SNAPSHOT' bouncyPgVersion = bouncyCastleVersion junitVersion = '5.8.2' + jazzerVersion = '0.24.0' logbackVersion = '1.5.13' mockitoVersion = '4.5.1' slf4jVersion = '1.7.36'