From 880b0720db8ad0806c8433aa4971d852abae545b Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Wed, 23 Jul 2025 10:40:45 +0200 Subject: [PATCH] WIP --- pgpainless-core/build.gradle | 3 + .../key/generation/KeyRingBuilder.kt | 5 +- .../secretkeyring/SecretKeyRingEditor.kt | 10 +-- .../kotlin/org/pgpainless/util/Passphrase.kt | 4 +- .../fuzzing/PGPObjectFactoryFuzzingTest.kt | 48 +++++++++++++ ...h-109647c495d69596e778c9d8077547b9ecf227a3 | Bin 0 -> 38 bytes ...h-16f60c43a386bd079675f4b67da22a6abc986fa1 | 1 + ...h-461a23344509ca1e8cae0c6e76d4dd3c8adf45d1 | Bin 0 -> 82 bytes ...h-a2bb907275f07fc8b8522f3d1d88f7a77b7cb193 | Bin 0 -> 16 bytes ...h-b8484cb8aa998062e1c4a7e8f749287d29b1a3b8 | Bin 0 -> 50 bytes ...h-f25481c9ffd17932404b3826bbc97c6a1f818446 | 5 ++ .../literaldata_binary_coffeebabe.asc | 5 ++ .../bouncycastle/fuzzing/ascii_armor.dict | 39 ++++++++++ .../bouncycastle/fuzzing/openpgp.dict | 34 +++++++++ .../sop/fuzzing/GenerateKeyFuzzTest.java | 67 ++++++++++++++++++ ...h-ab461f6b8a6842a473257a2561c1fbdf91bdfe77 | 0 ...h-e15f6d2aaf7124b3412b4ba69928aa087a2c37f3 | 2 + ...h-1a5db5bb461c354c040c6aff91bbf119661b19e8 | 1 + ...h-5088fe58b92db5e48f739e69e327d0b502f76d1a | 1 + ...h-6ef3f0fcd6325e34a205ca8e9f8ed2a648072776 | 1 + ...h-74ee2de3da27436407d779d58cc9256be185fede | 2 + ...h-a1a7715c7596c77b892dc6d4debb7c108ca4ef97 | 1 + ...h-ec9f11fde2456714178aecb8b78f181216a8150f | 3 + 23 files changed, 226 insertions(+), 6 deletions(-) create mode 100644 pgpainless-core/src/test/kotlin/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTest.kt create mode 100644 pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-109647c495d69596e778c9d8077547b9ecf227a3 create mode 100644 pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-16f60c43a386bd079675f4b67da22a6abc986fa1 create mode 100644 pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-461a23344509ca1e8cae0c6e76d4dd3c8adf45d1 create mode 100644 pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-a2bb907275f07fc8b8522f3d1d88f7a77b7cb193 create mode 100644 pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-b8484cb8aa998062e1c4a7e8f749287d29b1a3b8 create mode 100644 pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/crash-f25481c9ffd17932404b3826bbc97c6a1f818446 create mode 100644 pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/PGPObjectFactoryFuzzingTestInputs/parseFuzzedObjects/literaldata_binary_coffeebabe.asc create mode 100644 pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/ascii_armor.dict create mode 100644 pgpainless-core/src/test/resources/org/pgpainless/bouncycastle/fuzzing/openpgp.dict create mode 100644 pgpainless-sop/src/test/java/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTest.java create mode 100644 pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedPassphrase/crash-ab461f6b8a6842a473257a2561c1fbdf91bdfe77 create mode 100644 pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedPassphrase/crash-e15f6d2aaf7124b3412b4ba69928aa087a2c37f3 create mode 100644 pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-1a5db5bb461c354c040c6aff91bbf119661b19e8 create mode 100644 pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-5088fe58b92db5e48f739e69e327d0b502f76d1a create mode 100644 pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-6ef3f0fcd6325e34a205ca8e9f8ed2a648072776 create mode 100644 pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-74ee2de3da27436407d779d58cc9256be185fede create mode 100644 pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-a1a7715c7596c77b892dc6d4debb7c108ca4ef97 create mode 100644 pgpainless-sop/src/test/resources/org/pgpainless/sop/fuzzing/GenerateKeyFuzzTestInputs/generateKeyWithFuzzedUserId/crash-ec9f11fde2456714178aecb8b78f181216a8150f 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/kotlin/org/pgpainless/key/generation/KeyRingBuilder.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/key/generation/KeyRingBuilder.kt index 05adf7d9..ba043f05 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,10 @@ class KeyRingBuilder : KeyRingBuilderInterface { } override fun addUserId(userId: CharSequence): KeyRingBuilder = apply { - userIds[userId.toString().trim()] = null + require(!userId.contains("\n") && !userId.contains("\r")) { + "User-ID cannot contain newlines and/or carriage returns." + } + 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..b012c216 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,11 @@ class SecretKeyRingEditor( } private fun sanitizeUserId(userId: CharSequence): CharSequence = - // TODO: Further research how to sanitize user IDs. - // e.g. what about newlines? - userId.toString().trim() + userId.toString().also { + require(!it.contains("\n") && !it.contains("\r")) { + "UserId cannot contain newlines and/or carriage returns." + } + } private fun callbackFromRevocationAttributes(attributes: RevocationAttributes?) = object : RevocationSignatureSubpackets.Callback { 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..395198ed 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/util/Passphrase.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/util/Passphrase.kt @@ -17,7 +17,7 @@ class Passphrase(chars: CharArray?) { private val chars: CharArray? init { - this.chars = trimWhitespace(chars) + this.chars = chars;//trimWhitespace(chars) } /** @@ -67,6 +67,8 @@ class Passphrase(chars: CharArray?) { override fun hashCode(): Int = getChars()?.let { String(it) }.hashCode() + 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 0000000000000000000000000000000000000000..da0c74a5bb1df8629eec869ba2f90387fea66ec9 GIT binary patch literal 38 ecmcb(n~{N?fq{XA;s5{tMnH@Lz@q>EGXMarVHvjo literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..56ffc575bdfe5200affef2a70f1157bc0c1cea65 GIT binary patch literal 82 zcmdPZ1p)>J5UK0r>h9^M5a1r55bWvh=jx*1>lz&F= + +# +# 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/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/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