From 8e569e7931bfd5d74b50efdf4bb4224bd23cfcd1 Mon Sep 17 00:00:00 2001 From: DenBond7 Date: Fri, 9 Apr 2021 09:41:43 +0300 Subject: [PATCH] Added tests to KeyRingReaderTest to cover different cases of the source. --- .../key/parsing/KeyRingReaderTest.java | 126 +++++++++++- ...10_prv_and_pub_keys_armored_own_header.asc | 164 ++++++++++++++++ ...ub_keys_armored_own_with_single_header.asc | 124 ++++++++++++ .../resources/10_prv_and_pub_keys_binary.key | Bin 0 -> 4580 bytes .../10_prv_keys_armored_own_header.asc | 180 ++++++++++++++++++ ...rv_keys_armored_own_with_single_header.asc | 145 ++++++++++++++ .../10_prv_keys_armored_single_header.asc | 118 ++++++++++++ .../src/test/resources/10_prv_keys_binary.key | Bin 0 -> 5410 bytes .../10_pub_keys_armored_own_header.asc | 140 ++++++++++++++ ...ub_keys_armored_own_with_single_header.asc | 110 +++++++++++ .../10_pub_keys_armored_single_header.asc | 84 ++++++++ .../src/test/resources/10_pub_keys_binary.key | Bin 0 -> 3750 bytes .../test/resources/single_prv_key_armored.asc | 17 ++ .../test/resources/single_prv_key_binary.key | Bin 0 -> 539 bytes .../test/resources/single_pub_key_armored.asc | 13 ++ .../test/resources/single_pub_key_binary.key | Bin 0 -> 373 bytes 16 files changed, 1211 insertions(+), 10 deletions(-) create mode 100644 pgpainless-core/src/test/resources/10_prv_and_pub_keys_armored_own_header.asc create mode 100644 pgpainless-core/src/test/resources/10_prv_and_pub_keys_armored_own_with_single_header.asc create mode 100644 pgpainless-core/src/test/resources/10_prv_and_pub_keys_binary.key create mode 100644 pgpainless-core/src/test/resources/10_prv_keys_armored_own_header.asc create mode 100644 pgpainless-core/src/test/resources/10_prv_keys_armored_own_with_single_header.asc create mode 100644 pgpainless-core/src/test/resources/10_prv_keys_armored_single_header.asc create mode 100644 pgpainless-core/src/test/resources/10_prv_keys_binary.key create mode 100644 pgpainless-core/src/test/resources/10_pub_keys_armored_own_header.asc create mode 100644 pgpainless-core/src/test/resources/10_pub_keys_armored_own_with_single_header.asc create mode 100644 pgpainless-core/src/test/resources/10_pub_keys_armored_single_header.asc create mode 100644 pgpainless-core/src/test/resources/10_pub_keys_binary.key create mode 100644 pgpainless-core/src/test/resources/single_prv_key_armored.asc create mode 100644 pgpainless-core/src/test/resources/single_prv_key_binary.key create mode 100644 pgpainless-core/src/test/resources/single_pub_key_armored.asc create mode 100644 pgpainless-core/src/test/resources/single_pub_key_binary.key diff --git a/pgpainless-core/src/test/java/org/pgpainless/key/parsing/KeyRingReaderTest.java b/pgpainless-core/src/test/java/org/pgpainless/key/parsing/KeyRingReaderTest.java index 6efb9d4f..1a5c5877 100644 --- a/pgpainless-core/src/test/java/org/pgpainless/key/parsing/KeyRingReaderTest.java +++ b/pgpainless-core/src/test/java/org/pgpainless/key/parsing/KeyRingReaderTest.java @@ -17,11 +17,7 @@ package org.pgpainless.key.parsing; import static org.junit.jupiter.api.Assertions.assertEquals; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; import java.net.URISyntaxException; import java.net.URL; import java.nio.charset.StandardCharsets; @@ -31,11 +27,7 @@ import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Collection; -import org.bouncycastle.openpgp.PGPException; -import org.bouncycastle.openpgp.PGPPublicKeyRing; -import org.bouncycastle.openpgp.PGPPublicKeyRingCollection; -import org.bouncycastle.openpgp.PGPSecretKeyRing; -import org.bouncycastle.openpgp.PGPUtil; +import org.bouncycastle.openpgp.*; import org.junit.jupiter.api.Test; import org.pgpainless.PGPainless; import org.pgpainless.implementation.ImplementationFactory; @@ -98,4 +90,118 @@ class KeyRingReaderTest { assertEquals(10, rings.size()); } + /** + * One armored pub key + */ + @Test + void parsePublicKeysSingleArmored() throws IOException, PGPException, URISyntaxException { + assertEquals(1, getPgpPublicKeyRingsFromResource("single_pub_key_armored.asc").size()); + } + + /** + * One binary pub key + */ + @Test + void parsePublicKeysSingleBinary() throws IOException, PGPException, URISyntaxException { + assertEquals(1, getPgpPublicKeyRingsFromResource("single_pub_key_binary.key").size()); + } + + /** + * Many armored pub keys with a single -----BEGIN PGP PUBLIC KEY BLOCK-----...-----END PGP PUBLIC KEY BLOCK----- + */ + @Test + void parsePublicKeysMultiplyArmoredSingleHeader() throws IOException, PGPException, URISyntaxException { + assertEquals(10, getPgpPublicKeyRingsFromResource("10_pub_keys_armored_single_header.asc").size()); + } + + /** + * Many armored pub keys where each has own -----BEGIN PGP PUBLIC KEY BLOCK-----...-----END PGP PUBLIC KEY BLOCK----- + */ + @Test + void parsePublicKeysMultiplyArmoredOwnHeader() throws IOException, PGPException, URISyntaxException { + assertEquals(10, getPgpPublicKeyRingsFromResource("10_pub_keys_armored_own_header.asc").size()); + } + + /** + * Many armored pub keys where each has own -----BEGIN PGP PUBLIC KEY BLOCK-----...-----END PGP PUBLIC KEY BLOCK-----. + * Each of those blocks can have a different count of keys. + */ + @Test + void parsePublicKeysMultiplyArmoredOwnWithSingleHeader() throws IOException, PGPException, URISyntaxException { + assertEquals(10, getPgpPublicKeyRingsFromResource("10_pub_keys_armored_own_with_single_header.asc").size()); + } + + /** + * Many binary pub keys + */ + @Test + void parsePublicKeysMultiplyBinary() throws IOException, PGPException, URISyntaxException { + assertEquals(10, getPgpPublicKeyRingsFromResource("10_pub_keys_binary.key").size()); + } + + /** + * One armored private key + */ + @Test + void parseSecretKeysSingleArmored() throws IOException, PGPException, URISyntaxException { + assertEquals(1, getPgpSecretKeyRingsFromResource("single_prv_key_armored.asc").size()); + } + + /** + * One binary private key + */ + @Test + void parseSecretKeysSingleBinary() throws IOException, PGPException, URISyntaxException { + assertEquals(1, getPgpSecretKeyRingsFromResource("single_prv_key_binary.key").size()); + } + + /** + * Many armored private keys with a single + * -----BEGIN PGP PRIVATE KEY BLOCK-----...-----END PGP PRIVATE KEY BLOCK----- + */ + @Test + void parseSecretKeysMultiplyArmoredSingleHeader() throws IOException, PGPException, URISyntaxException { + assertEquals(10, getPgpSecretKeyRingsFromResource("10_prv_keys_armored_single_header.asc").size()); + } + + /** + * Many armored private keys where each has own -----BEGIN PGP PRIVATE KEY BLOCK-----...-----END PGP PRIVATE KEY BLOCK----- + */ + @Test + void parseSecretKeysMultiplyArmoredOwnHeader() throws IOException, PGPException, URISyntaxException { + assertEquals(10, getPgpSecretKeyRingsFromResource("10_prv_keys_armored_own_header.asc").size()); + } + + /** + * Many armored private keys where each has own -----BEGIN PGP PRIVATE KEY BLOCK-----...-----END PGP PRIVATE KEY BLOCK-----. + * Each of those blocks can have a different count of keys. + */ + @Test + void parseSecretKeysMultiplyArmoredOwnWithSingleHeader() throws IOException, PGPException, URISyntaxException { + assertEquals(10, getPgpSecretKeyRingsFromResource("10_prv_keys_armored_own_with_single_header.asc").size()); + } + + /** + * Many binary private keys + */ + @Test + void parseSecretKeysMultiplyBinary() throws IOException, PGPException, URISyntaxException { + assertEquals(10, getPgpSecretKeyRingsFromResource("10_prv_keys_binary.key").size()); + } + + private InputStream getFileInputStreamFromResource(String fileName) throws IOException, URISyntaxException { + URL resource = getClass().getClassLoader().getResource(fileName); + assert resource != null; + return new FileInputStream(new File(resource.toURI())); + } + + private PGPPublicKeyRingCollection getPgpPublicKeyRingsFromResource(String fileName) + throws IOException, URISyntaxException, PGPException { + return PGPainless.readKeyRing().publicKeyRingCollection(getFileInputStreamFromResource(fileName)); + } + + private PGPSecretKeyRingCollection getPgpSecretKeyRingsFromResource(String fileName) + throws IOException, URISyntaxException, PGPException { + return PGPainless.readKeyRing().secretKeyRingCollection(getFileInputStreamFromResource(fileName)); + } } diff --git a/pgpainless-core/src/test/resources/10_prv_and_pub_keys_armored_own_header.asc b/pgpainless-core/src/test/resources/10_prv_and_pub_keys_armored_own_header.asc new file mode 100644 index 00000000..a38f1632 --- /dev/null +++ b/pgpainless-core/src/test/resources/10_prv_and_pub_keys_armored_own_header.asc @@ -0,0 +1,164 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: PGPainless + +lIYEYHAmeBYJKwYBBAHaRw8BAQdAsNif50e48mXiSJs9FUoKLQiHKxJsT5JeFds/ +ESdURTP+CQMCaj/bYOUdkEBg+1u3+YdXdcVnI/te70pzg5s40p5DitXwpBMkGkRt +/jBmcbkqbEmn5Wo8BnWVXgYCU35Zscfw89T47+P4IeUa62pJQ6h/prQVdXNlcl8x +QHBncGFpbmxlc3Mua2V5iHgEExYKACAFAmBwJngCGwMFFgIDAQAECwkIBwUVCgkI +CwIeAQIZAQAKCRD2lk9HdieGoxZnAP44TahL9gBHCKJnjk8R/5LNJ8EtrAKBtoDJ +CEvvWaBuqwEA4owkDk2AoldtO4JONniFgfswjlDpSV0yO9Cyd9aWngGciwRgcCZ4 +EgorBgEEAZdVAQUBAQdA+rJSmUkbJUMrD3hFueaGaTeEtrlMvRiSQDIp/O5T7wID +AQgH/gkDAmo/22DlHZBAYJgEr73Cd9TT0y9PGppzR+X0F78qaAcz7ReS5wqtx70/ +xp7w7yFYVUGws7AqP2I/HkoSb4bGD2q4gnymDmqtrwXKYP81+YyIdQQYFgoAHQUC +YHAmeAIbDAUWAgMBAAQLCQgHBRUKCQgLAh4BAAoJEPaWT0d2J4aj4ZQA/i7Z3oaX +siOIFzTZVQNW9D1Nw3g4UlxDj1noE0fNkvPvAP9kSug5Udegwi74aArKWgn3l2h0 +2CQBed23+9GAz6uPAg== +=jFGg +-----END PGP PRIVATE KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYHAmeBYJKwYBBAHaRw8BAQdAY5XsmOmUxofcA2EinpZrIdFs2dCJWEOWI9Yd +cBFi47q0FXVzZXJfMkBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcCZ4AhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQRR0wO+MtSoYF7QD/QABrM/ayZDmVCPoJ +fI3v+kgy3U1d8tmkD0JzRAjMZlgBAPqYJLYToNFTsLjJZzr/Zu6xw2z9jFT3J7Br +6xbwfh4KuDgEYHAmeBIKKwYBBAGXVQEFAQEHQGm3FL37xbPAI7HYqLVNCmVMw529 +qU356R2wGoF+8/kuAwEIB4h1BBgWCgAdBQJgcCZ4AhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQRR0wO+MtSoa/mgD/VocSWWAurRJtrxvJZk3lbZxrH42OKzrs4TKl +rpDcKjsA/0rx4GCJ7feAJlu1SuST0DFf4SDxEG9p6gilN1Sps68H +=61NU +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYHAmeBYJKwYBBAHaRw8BAQdA4Qp8tD4YxuiTTFu5AT+O2NSmSZ4/juDc5VMh +2pSktfe0FXVzZXJfNUBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcCZ4AhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQedgzKs5PmqINUgD+MYXB1GqfwL6VgdJ1 +2mMlcQ5YBubVS3tkpKoWMQ/ocfsA/1dLZtyw+NzKPfutFL0sgIoS1rUJhrMmpyYo +EB7Yn6sGuDgEYHAmeBIKKwYBBAGXVQEFAQEHQKtg/n4I0nxGgeRChldquO1mykQ+ +AgiDl2ZxgYkB4wQSAwEIB4h1BBgWCgAdBQJgcCZ4AhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQedgzKs5PmqJNiAEAkyzCrZvomuH95ClQFXNJIE5URaGKCJpbfAJX +IhpmVTUA/0iQWFI7VRMBfdRYrqx/PON4JpMkeK+7uFJyx68EcAIJ +=0mLx +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: PGPainless + +lIYEYHAmeBYJKwYBBAHaRw8BAQdAkrkM+HLg4j03MCV6wyq0cMuzVsQuFvU/hOJw +ztVKpXH+CQMC/qFAX/Eh8dlgepNQh8TD+TTu1HkcfOtuSfwh6qFbaa39hml5KcgE +tqyCB3kPWYXp0AXg8rdSFhmPJ9wG9f41ivR4H1RnBIQecgCrhUtsCrQVdXNlcl82 +QHBncGFpbmxlc3Mua2V5iHgEExYKACAFAmBwJngCGwMFFgIDAQAECwkIBwUVCgkI +CwIeAQIZAQAKCRBhI2n85j1PP7xbAQCsVVCZzapd6SO8l3GRHRdk5aSaDo/jqFpR +ABmPCUnBSwD/WomL+gZVO3vB9ztwbg7v42ikyqXJkX15Sqy0iwiJEA+ciwRgcCZ4 +EgorBgEEAZdVAQUBAQdAR03t5dr8G4bhFkGxxBS6XAxUQYAfs+JhDEXh7HmpBysD +AQgH/gkDAv6hQF/xIfHZYKXvRhnf6KWBuSt+Nybj5uDAuk5Gx9Ak7evxC+ZP1Uqd +hA9v+xyWFpWBGl43/s7XgfUfRNUDeI7jl8hIHPtP4t024iIhj0CIdQQYFgoAHQUC +YHAmeAIbDAUWAgMBAAQLCQgHBRUKCQgLAh4BAAoJEGEjafzmPU8/R2QBAJ00KYxF +zd/ZrWzbeXnFpGimxSR7htezEJSqfYLexluhAQCW5zYqyhb+CBwMI6YsxZN07vpD +15ZWAIev2a1SBpyLDg== +=HrqY +-----END PGP PRIVATE KEY BLOCK----- + +-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: PGPainless + +lIYEYHAmeBYJKwYBBAHaRw8BAQdA4Qp8tD4YxuiTTFu5AT+O2NSmSZ4/juDc5VMh +2pSktff+CQMCgfI2VjTLYClgP21U2L0JimiQ4AWf57RN5aZjNK2xhpuwKWxeuBJT +MWPkzoZk3q5z05g2Gr13DCKHkPXzTybACWWGYdCv/oIjSgz63Qm+67QVdXNlcl81 +QHBncGFpbmxlc3Mua2V5iHgEExYKACAFAmBwJngCGwMFFgIDAQAECwkIBwUVCgkI +CwIeAQIZAQAKCRB52DMqzk+aog1SAP4xhcHUap/AvpWB0nXaYyVxDlgG5tVLe2Sk +qhYxD+hx+wD/V0tm3LD43Mo9+60UvSyAihLWtQmGsyanJigQHtifqwaciwRgcCZ4 +EgorBgEEAZdVAQUBAQdAq2D+fgjSfEaB5EKGV2q47WbKRD4CCIOXZnGBiQHjBBID +AQgH/gkDAoHyNlY0y2ApYBJBOffD6Mg5ybgJnPfCQCvOUuaicZUcoMX3vAo6CiIW +h+dGtR1/+2/byUG0VLroevWUm5Uedu3XqOua8TKMV3XJ8ch0KwGIdQQYFgoAHQUC +YHAmeAIbDAUWAgMBAAQLCQgHBRUKCQgLAh4BAAoJEHnYMyrOT5qiTYgBAJMswq2b +6Jrh/eQpUBVzSSBOVEWhigiaW3wCVyIaZlU1AP9IkFhSO1UTAX3UWK6sfzzjeCaT +JHivu7hScsevBHACCQ== +=wJjO +-----END PGP PRIVATE KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYHAmeBYJKwYBBAHaRw8BAQdAOxtIECQUKaJ0uZ1sQFXhJIlzdhYFb8UDzjjQ +L21h5Lm0FXVzZXJfNEBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcCZ4AhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQ1GStwyTkF5MhZAEA5SBQvhc4NL/3HIij +GoW66d8CLO57X1fNt6dlU1ADYAcBANxwix6/cIxA4Rj3bJjjJCbOPNhWhRuNIhNo +wzvKDEQLuDgEYHAmeBIKKwYBBAGXVQEFAQEHQPHKDcBu8XdMII3VTPXfQWPdJnxa +20rxxPn3GCuxReNVAwEIB4h1BBgWCgAdBQJgcCZ4AhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQ1GStwyTkF5NPWAD9Gp4TiHXgnF1Dl0H0VOUrRWese+sX/i6IzhPb +Guhz0VoBAK9bA1KjA/GnqFohU5yBcgo5LipS6cwpwJIysxIH5XkH +=T/q3 +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: PGPainless + +lIYEYHAmeBYJKwYBBAHaRw8BAQdAOxtIECQUKaJ0uZ1sQFXhJIlzdhYFb8UDzjjQ +L21h5Ln+CQMCk81xk5grVRxgQzPOtRmpMg8ryMmQDNPbGSEoZ29anofFDodDXkzU +kWRIjs3W+GPHFtU6PXPlVKlsQOidYqCa4bhSPmVpT6oQiGYCCBBxp7QVdXNlcl80 +QHBncGFpbmxlc3Mua2V5iHgEExYKACAFAmBwJngCGwMFFgIDAQAECwkIBwUVCgkI +CwIeAQIZAQAKCRDUZK3DJOQXkyFkAQDlIFC+Fzg0v/cciKMahbrp3wIs7ntfV823 +p2VTUANgBwEA3HCLHr9wjEDhGPdsmOMkJs482FaFG40iE2jDO8oMRAuciwRgcCZ4 +EgorBgEEAZdVAQUBAQdA8coNwG7xd0wgjdVM9d9BY90mfFrbSvHE+fcYK7FF41UD +AQgH/gkDApPNcZOYK1UcYDFWAnVtsipQKZ35nSRI+BT+6mwdxONsjGFTtDkyQWxl +vkrAv4/m6qMzcWnATGRk09l5wiF/zokOangESlDB/ik7z+0RzbGIdQQYFgoAHQUC +YHAmeAIbDAUWAgMBAAQLCQgHBRUKCQgLAh4BAAoJENRkrcMk5BeTT1gA/RqeE4h1 +4JxdQ5dB9FTlK0VnrHvrF/4uiM4T2xroc9FaAQCvWwNSowPxp6haIVOcgXIKOS4q +UunMKcCSMrMSB+V5Bw== +=OI8Q +-----END PGP PRIVATE KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYHAmeBYJKwYBBAHaRw8BAQdAejN9VgQ7yvGDzOx/Qix0Y9fBAwwPLQiJoYRJ +rQith6O0FXVzZXJfN0BwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcCZ4AhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQgGDD2RYDRyT59AD/euCDdbEWf/q6R9cj +Gf/yL/kh/jFAz+SIYyeUUWtHe74BALtMJvvzyBBNewEytx6SkWxyAsHOZKIU0o/6 ++44PHx8AuDgEYHAmeBIKKwYBBAGXVQEFAQEHQN647yt5WraIku1mRkGlJnuoOYiu +nWE4s0/2SGe4nWRzAwEIB4h1BBgWCgAdBQJgcCZ4AhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQgGDD2RYDRyTiVgD/djxM3dSaq/S60AjvwxF7Ex+5qMlH12h+VvnM +BE0uKKEBAPwZyZuhk7dqZsGZT/YYJSvA6ARFimW8l9FK0yuELEwN +=9S1z +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: PGPainless + +lIYEYHAmeBYJKwYBBAHaRw8BAQdAejN9VgQ7yvGDzOx/Qix0Y9fBAwwPLQiJoYRJ +rQith6P+CQMCugL+L9nbmH9gDIVYDIdQPWee7gYJu15TKdkUa2gfmzW9hE0WPTIa +soPXI+aWfVfeW1KLlPgBuiMKcQW5rN/UbUvkbc0+8znntn2T2cWWErQVdXNlcl83 +QHBncGFpbmxlc3Mua2V5iHgEExYKACAFAmBwJngCGwMFFgIDAQAECwkIBwUVCgkI +CwIeAQIZAQAKCRCAYMPZFgNHJPn0AP964IN1sRZ/+rpH1yMZ//Iv+SH+MUDP5Ihj +J5RRa0d7vgEAu0wm+/PIEE17ATK3HpKRbHICwc5kohTSj/r7jg8fHwCciwRgcCZ4 +EgorBgEEAZdVAQUBAQdA3rjvK3latoiS7WZGQaUme6g5iK6dYTizT/ZIZ7idZHMD +AQgH/gkDAroC/i/Z25h/YED/jFmVTEDKjZtc73ivSzjnEVnzTEsErvxfYI2/oPxO +T0OHAUnV4rjgkwZ/Q/dseUYJoMlr8Ei8JgQU/PeDpfgU+/Lf0hqIdQQYFgoAHQUC +YHAmeAIbDAUWAgMBAAQLCQgHBRUKCQgLAh4BAAoJEIBgw9kWA0ck4lYA/3Y8TN3U +mqv0utAI78MRexMfuajJR9doflb5zARNLiihAQD8GcmboZO3ambBmU/2GCUrwOgE +RYplvJfRStMrhCxMDQ== +=y9Ga +-----END PGP PRIVATE KEY BLOCK----- + +-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: PGPainless + +lIYEYHAmeBYJKwYBBAHaRw8BAQdAagLe6D11vdK6HO8r+XKwPG8sHx8MssIs98/5 +saCpe37+CQMCwO1fo3sfuyxgwjJ3WmHPygN5jU6tZ9aAaQMnRaPr5VI9SIWBPxDz +fGojXfHgVgTsprIO/+icoRt9kJbfiJAgJDh5fK4reL91OuGXcq7i/bQVdXNlcl85 +QHBncGFpbmxlc3Mua2V5iHgEExYKACAFAmBwJngCGwMFFgIDAQAECwkIBwUVCgkI +CwIeAQIZAQAKCRDMhKt7dJuD6zN6AQCSpAuD7B6qjAtLkfwyHHTfAHAp48nR8hUh +1QbMgSl1ywEA7IwyAM9C5GZdX5crVTnQSSG8vv66yA92GdqR1AAL6wuciwRgcCZ4 +EgorBgEEAZdVAQUBAQdAG6nAReqXWIshjg7Q9iNAn/vdSHaG+GuVDuJe5Dix4CYD +AQgH/gkDAsDtX6N7H7ssYK0HRK1Tn5fXxATVT3fDggF+6hN6it6UPWaioz4/eRwZ +6T09hS2NQ9cdkX7CP/0lwT+b1ZRuJf7L6ocrKbqw7qRFKwc6MZaIdQQYFgoAHQUC +YHAmeAIbDAUWAgMBAAQLCQgHBRUKCQgLAh4BAAoJEMyEq3t0m4PryFkA/jZ7HuJK +1IN8KsJjTdB5jHZ/mwDx83+Ur8BQEHRjPvglAQDm4zNhmRQvPBploX9FrEwbRVk3 +qH98S9dQSRizw3hxAg== +=g+Is +-----END PGP PRIVATE KEY BLOCK----- + diff --git a/pgpainless-core/src/test/resources/10_prv_and_pub_keys_armored_own_with_single_header.asc b/pgpainless-core/src/test/resources/10_prv_and_pub_keys_armored_own_with_single_header.asc new file mode 100644 index 00000000..53414a55 --- /dev/null +++ b/pgpainless-core/src/test/resources/10_prv_and_pub_keys_armored_own_with_single_header.asc @@ -0,0 +1,124 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYHAlORYJKwYBBAHaRw8BAQdAmzzc3qieoqkfAIimRaqzK8UNJGUamntMPKYU +KK6p9Ju0FXVzZXJfNkBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcCU5AhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQMW3iTVXCbVZzwwEAyGfwbiIuTmg+Od0E +yJ8jF7n9tvaS5L6fxDT0xq8SYmkA/1ry4une20t9Yz/qY0N5++gwYbSsmCrkX0YK +lAUMl2sMuDgEYHAlORIKKwYBBAGXVQEFAQEHQG/MiY1jVyuZmhhkKJYwZv/EIYsy +JMzdBakWVodt7QQFAwEIB4h1BBgWCgAdBQJgcCU5AhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQMW3iTVXCbVbB5QEA88B5VSDZQ91spIYFahhFncdUOs6S/ht2t+Am +sohefL0BAPO8UZ69BMcvHXXlZYZwTvtHZ+ejpXPKlo9YrqVn83cPmDMEYHAlORYJ +KwYBBAHaRw8BAQdAHMIr4TVlTYJkFGvGj6zX7iXad9FDMUy77yje0F12saO0FXVz +ZXJfN0BwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcCU5AhsDBRYCAwEABAsJCAcF +FQoJCAsCHgECGQEACgkQxwYo2lfMj0zm7wEAqF6X7YGUEDfCRmUBd7e0iLWwV0TM +mVSbjedEy521JicBALXC/KEzhdzh/S0HO/qTUP8FX94fFXIhj5i1WcsWBksIuDgE +YHAlORIKKwYBBAGXVQEFAQEHQB1nQpqwWK0qsxgBCufPDeIT04itixi68t5YmIL6 +uyFxAwEIB4h1BBgWCgAdBQJgcCU5AhsMBRYCAwEABAsJCAcFFQoJCAsCHgEACgkQ +xwYo2lfMj0wWOwEAiMs0lXlOckhMCiVIGoEpMiGwg0GMlW4QZAn7DoZQ+noA/18A +6QJy2oqChCI/8IPLsI7L7jlEtcueQxP2xZJMvBUH +=bYjU +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: PGPainless + +lIYEYHAlORYJKwYBBAHaRw8BAQdAmzzc3qieoqkfAIimRaqzK8UNJGUamntMPKYU +KK6p9Jv+CQMC4pwxGgHepUFgOw9r6aayb6YIg2DULWkZvh7qjPaoY+nragAEDRtj +0kxffLstFFjuBaaK138X2GwHnqhzma7Pvm6jogNhwT0sMUwmtQAsFLQVdXNlcl82 +QHBncGFpbmxlc3Mua2V5iHgEExYKACAFAmBwJTkCGwMFFgIDAQAECwkIBwUVCgkI +CwIeAQIZAQAKCRAxbeJNVcJtVnPDAQDIZ/BuIi5OaD453QTInyMXuf229pLkvp/E +NPTGrxJiaQD/WvLi6d7bS31jP+pjQ3n76DBhtKyYKuRfRgqUBQyXawyciwRgcCU5 +EgorBgEEAZdVAQUBAQdAb8yJjWNXK5maGGQoljBm/8QhizIkzN0FqRZWh23tBAUD +AQgH/gkDAuKcMRoB3qVBYPiBOnuPOpwnsCc2+5AV5kgGSueifKXvhi/ij5Oq1Oqh +J3/0cHqyH4QIchkjk7tghspr5EnaTiMj25sA0U3SPAVoVyQhTpSIdQQYFgoAHQUC +YHAlOQIbDAUWAgMBAAQLCQgHBRUKCQgLAh4BAAoJEDFt4k1Vwm1WweUBAPPAeVUg +2UPdbKSGBWoYRZ3HVDrOkv4bdrfgJrKIXny9AQDzvFGevQTHLx115WWGcE77R2fn +o6VzypaPWK6lZ/N3D5SGBGBwJTkWCSsGAQQB2kcPAQEHQBzCK+E1ZU2CZBRrxo+s +1+4l2nfRQzFMu+8o3tBddrGj/gkDApjI9qWtwifCYIuMnxwgouxEvkgT5CExEq4s +40sNo39NfYVVmiMz70U91SZn/VJO+uk9YLr8B7NWnMiQZF9oPMMGICJHMFpzcXjx +Nk1Ez4K0FXVzZXJfN0BwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcCU5AhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQxwYo2lfMj0zm7wEAqF6X7YGUEDfCRmUB +d7e0iLWwV0TMmVSbjedEy521JicBALXC/KEzhdzh/S0HO/qTUP8FX94fFXIhj5i1 +WcsWBksInIsEYHAlORIKKwYBBAGXVQEFAQEHQB1nQpqwWK0qsxgBCufPDeIT04it +ixi68t5YmIL6uyFxAwEIB/4JAwKYyPalrcInwmBfBkYOOF2YeSW1r+h9zpaSkpcU +PK8qdcxF9o9AnXZelAZ/N7N0dY/NyBurkVGNMosoqz8Sdy09kl0buBmBAqWbilGZ +M3vviHUEGBYKAB0FAmBwJTkCGwwFFgIDAQAECwkIBwUVCgkICwIeAQAKCRDHBija +V8yPTBY7AQCIyzSVeU5ySEwKJUgagSkyIbCDQYyVbhBkCfsOhlD6egD/XwDpAnLa +ioKEIj/wg8uwjsvuOUS1y55DE/bFkky8FQc= +=Wxwr +-----END PGP PRIVATE KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYHAlORYJKwYBBAHaRw8BAQdARz3m691XOZQIInRj8cmWQlYHldFRifZdTYFI +VokwBhu0FXVzZXJfMEBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcCU5AhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQmH4XtPAVoPbD6gEA1KhhPa002JmQPD2u +vOXru3udR+lVfRMkq0tyy8/6bbcBAKyxsN6eiQq9IrUmM9BapF3zkViAgS59OXN+ +hKICAeMEuDgEYHAlORIKKwYBBAGXVQEFAQEHQO26cZ2EmBII8020nQDuIRB8A6BY +70VMPhW0nL/+R5BTAwEIB4h1BBgWCgAdBQJgcCU5AhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQmH4XtPAVoPbYNwEA3pD/RRqS92/AqB2UdVWZv5uJXDZ3zaPg7Bl2 +6zX6wGgA/2HBMc9FJo3xODbmfH28x8VBX7qQ5bQz7fnLoRfnl+wKmDMEYHAlORYJ +KwYBBAHaRw8BAQdA5sNG1f6Zl61ktBMz76XcpksjsAbnQA2sm/WMtLUaPDy0FXVz +ZXJfMUBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcCU5AhsDBRYCAwEABAsJCAcF +FQoJCAsCHgECGQEACgkQRaaWk44wdeRSdgEAq/OwTLxeoIAWZchNJuy+5sT/HNI7 +IWK3heawdd526mgA/0qJ2j48434V1SevzzhkfZN7HVv20inQ2FtEM5+dZeMPuDgE +YHAlORIKKwYBBAGXVQEFAQEHQK9rfPruw1nK++JpWULtWG7gkEzgyzsPs9nsPazK +vXsyAwEIB4h1BBgWCgAdBQJgcCU5AhsMBRYCAwEABAsJCAcFFQoJCAsCHgEACgkQ +RaaWk44wdeTYuQD+OlL+y1Q23q5kDU4cZiVT/ziGI+n17vUwF84QbX5rP+gA/isq +hUnVq0pr1u5Uy6OLYtLGB2era9U/k1H8Gjyk5ZoA +=w4U3 +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: PGPainless + +lIYEYHAlORYJKwYBBAHaRw8BAQdA1xgkfvxW4Xmke753Ie0J3ajcSnPRNOabkGQU +YLfap2j+CQMCHs3KAF0DRqNgiHd2zxIjsRu+hoaW5Mg65MOtuymosz1xLIvKGFiZ +G2bQux74/gPs4zQewmvE0TaWSXdPQGAp0ILNKR0Xhj7E3ffRZ106B7QVdXNlcl80 +QHBncGFpbmxlc3Mua2V5iHgEExYKACAFAmBwJTkCGwMFFgIDAQAECwkIBwUVCgkI +CwIeAQIZAQAKCRBMARVLCBmD478fAQC737l9ysp+Z6xvbzBbphWN2+yD3rvCIKrT +MtrVACMW8AEA1P7zy84b6fyQ4VtP1levGSXTAB6kfK8wi7CGP4YZCACciwRgcCU5 +EgorBgEEAZdVAQUBAQdAVf4ZPjYBeQ3EcpRzaC2uFA1/vFctpyxzjtK4q9DSjxoD +AQgH/gkDAh7NygBdA0ajYLfNwgVFld1vEyrEwrmjzJjZzDlsQMf1ACJyWWQGhdAI +otdl/6PmzyXRsUejHBui5FcjEUNTQcQq5kvMpZz2swt+h3ejq/qIdQQYFgoAHQUC +YHAlOQIbDAUWAgMBAAQLCQgHBRUKCQgLAh4BAAoJEEwBFUsIGYPjv3IBANecnKSj +Z9U/YKvnvkqa8l1dMyA0Kbj8SQCHcl45k0ScAQDzhKz7wWQvlz8/yB6SrOkX4xjb +lS74s9TQm5bs2LxLB5SGBGBwJTkWCSsGAQQB2kcPAQEHQM2pisjJOE317jkdbxJL +kvOVw0uAni3u7g4Xq5ko4BF4/gkDAt8phU7BaXfrYKbaRL5wj0Bdx7VJAplie2Kd +GwEOAqbWdgnhYmSE5yR8Mc5C2XJpPovJWSIbntYJABDuzmzvQQqGP70xr6jJAUp3 +keIDh/m0FXVzZXJfNUBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcCU5AhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQQU2XrC/eS/FKqQD/YLyZ6BvOC2D3psKy +28R5uuMGmeeZe+qX2dd5CfPzpFMBAKW7h/bquYUw85Wb+bDxGSHSh664o9vyW13o +76W+IVULnIsEYHAlORIKKwYBBAGXVQEFAQEHQAj3gJD6yUdLgaQA+5D1/OsPdQtV +zWOpjZkHG8NK2eILAwEIB/4JAwLfKYVOwWl362BWHEidESWr4YxAG60R+UMclxAo +7usJmr8Acy6yDSoEYT31kg11v6Mj750Tr18pH8aZ16HL9bIL6/J/Mp9sm82SqE6c +cdMDiHUEGBYKAB0FAmBwJTkCGwwFFgIDAQAECwkIBwUVCgkICwIeAQAKCRBBTZes +L95L8aAxAQDfbtr2fINdmCWi9LupYTW8Q38d9qP6RbqHoxG9y4lwTwEA7IeRqpmh +WB+BqZ7jNgJUfTr2WIzxzEJJUZiJrlr5wgQ= +=Kh8y +-----END PGP PRIVATE KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYHAlORYJKwYBBAHaRw8BAQdAsvxDaHyPdl7UgJerbcGCDvV+7APBmHKwc2gU +bFzLcgi0FXVzZXJfMkBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcCU5AhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQ57QVS3bkNNL1BgEAgAFTAC6w+Iztj+xZ +igesF0rtfoANunGRZnaRaq6XygoBAIOzF4V8xWXENxaL9531CWSxofYLQLHPE+To +sG+M8foAuDgEYHAlORIKKwYBBAGXVQEFAQEHQKTn9PjGPoeU4MwiKbBcCsvkPo1S +ByaTmgDgGHumORxIAwEIB4h1BBgWCgAdBQJgcCU5AhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQ57QVS3bkNNL7xQEA4jIFVZ5entpOtz8OxQNfQdE4sfZLmCLNmhAV +mdGooO0A/jSM0EgctNPRyyjJFeY6PkdWYJkzyNrabIj89SlSVkgAmDMEYHAlORYJ +KwYBBAHaRw8BAQdA613vihbWPqkUEQv7SYvRFZi6uoWI7qqRmgHgTszyTp+0FXVz +ZXJfM0BwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcCU5AhsDBRYCAwEABAsJCAcF +FQoJCAsCHgECGQEACgkQ4AyrMtIbH1EutwEAxq9X8A7I5uFY3/ZG5KoS0/9HlfuJ +UcoNkDhApI4yF1EA/jAWNWSm3QaxqMux4vK9kTnlkdCnrcm7VijPylBZ0dcLuDgE +YHAlORIKKwYBBAGXVQEFAQEHQG3lgQbIh9opiiMP8xSHu2H+KN2ir6FkMQlJeulD +q00PAwEIB4h1BBgWCgAdBQJgcCU5AhsMBRYCAwEABAsJCAcFFQoJCAsCHgEACgkQ +4AyrMtIbH1H7BQEA6IhPybD5Zp9TPyLyRpmhINv0wW9BFOsD6zEagapl5VABAOO4 +0oMmO25amIOvw4zoOJDypIQ+wNp+62iNde0pukwP +=8kgY +-----END PGP PUBLIC KEY BLOCK----- + diff --git a/pgpainless-core/src/test/resources/10_prv_and_pub_keys_binary.key b/pgpainless-core/src/test/resources/10_prv_and_pub_keys_binary.key new file mode 100644 index 0000000000000000000000000000000000000000..c0fd31b7d6d3a83b71c129b8d8fde554fffd8904 GIT binary patch literal 4580 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 Jujpox{|^{{ZcYFI literal 0 HcmV?d00001 diff --git a/pgpainless-core/src/test/resources/10_pub_keys_armored_own_header.asc b/pgpainless-core/src/test/resources/10_pub_keys_armored_own_header.asc new file mode 100644 index 00000000..12909107 --- /dev/null +++ b/pgpainless-core/src/test/resources/10_pub_keys_armored_own_header.asc @@ -0,0 +1,140 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYG/9ohYJKwYBBAHaRw8BAQdA4GSi/WpR575SzzySN3vEE0bNFDtVdlZDyLId +dRRqSNK0FXVzZXJfMEBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgb/2iAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQ3lmK+Q9CM1OQsgEAgP+ty9SsUDSR3fxy +2N+T5bnHD/THPm/kcti8kvKAmw8A/iTzSqRipsvhENtJFWIxRJ/k6f2KDaklyvv6 +h8PfgzYCuDgEYG/9ohIKKwYBBAGXVQEFAQEHQDLMC4z5APiY03VRlkeT5JuaPc8j +0kp/cFJagAKyMKsPAwEIB4h1BBgWCgAdBQJgb/2iAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQ3lmK+Q9CM1MD7wEAnfdY/4o1yBx4cs/eEaGrI2xAc8aVzzJuNMgb +PRPeS+8BAO1MFcwKzoXd4T4iWgtx9/8jTVooLoo33kQ7969j8CEN +=o0o0 +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYG/9ohYJKwYBBAHaRw8BAQdACWsgtXPmLLlSPwxaFQog9mQFy6ZZbHvj6iQE +/TMXLDy0FXVzZXJfMUBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgb/2iAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQTvNRpybL9o/LjgD8Ct9IonhYoV06NG5L +9+QooEvEKEC+NB3pPLKReJ6v0e4A/2K2E7HPRJ0+MgOlI3jGvrKkUN0gTyFqAGdR +Fvew37QIuDgEYG/9ohIKKwYBBAGXVQEFAQEHQGoBqjPjZQ5h+7vnHSlSprqWablw +7LFDDT9MQu3cBkRdAwEIB4h1BBgWCgAdBQJgb/2iAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQTvNRpybL9o/PcQD/TFVUb/LDpscZ0xlBqnEFBbQIIWRu+PKh3JQT +Yvqu4i0BAL5fp4R7UoyaQcVJSQJpzb4rPLtYXHd7TlX86d5mgvwI +=IC+d +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYG/9ohYJKwYBBAHaRw8BAQdAr3O4Z2t/kjwlpMAZ1HnWpNI5q454f7/v7YtU +0QcWbF20FXVzZXJfMkBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgb/2iAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQ6jfPv1Dm28J2VAD+MCYaGxj+9eap+3ji +OM8P5zFa9GRS+hNqnlDCZHkr9PIBAMSTLKkgnwwt8s8pfJmm22yDQdioTm9PGXga +E23X/ekGuDgEYG/9ohIKKwYBBAGXVQEFAQEHQK63qGKVJJv2jS/5YrOSYjIpn/V7 +SibTWSJyqnkxT/Z6AwEIB4h1BBgWCgAdBQJgb/2iAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQ6jfPv1Dm28JWvgEAqmMS7ougF2hJlHa5eyFgbNuhlLRCPnfzRude +9SQnBaIBAM+aBuDKqKjSSQcUnCxzbpD5gOL11iH9+InRxeZ7ChsN +=1NKN +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYG/9ohYJKwYBBAHaRw8BAQdAsXtdS9mXjUhK/4E0k7lePNImlIxYWtiGDGwb +gC628ti0FXVzZXJfM0BwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgb/2iAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQwV6MaZHP9oGx4QEA9q8e29stf6sKrO5k +rrYmltCiAfbNyApoE25qgJVIhuUBANVCX5BMo5VVzrtIIDJEP2tIQojqouiUIvsY +o4bJpRQDuDgEYG/9ohIKKwYBBAGXVQEFAQEHQJ9W09XvWgQ7L7Dnnap9olbSdbSI +WTonf/w5QzxvciJmAwEIB4h1BBgWCgAdBQJgb/2iAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQwV6MaZHP9oFU2QD/W/iCIUCmMMmOHpeaipefcu4zdjfxcVUXdCq6 +rSot3vcBALw6wIyVnvoIbJwV1/wRkeqcRGatIcD8s7p2a3HypaAM +=a4Gf +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYG/9ohYJKwYBBAHaRw8BAQdArKS8wI+1pwL4wbXVLe04GE6ikSl+GFgTW6aY +uPGYa720FXVzZXJfNEBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgb/2iAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQQzWJGPuZt38U2wEA/V4n9MTiKoXkPMVR +I0Xv6jY0w+yqZA2un2JyWfd+lCoBAJ628ydwNX1oyK64qeJYAu7CCYSr52dTZ2aX +X2ZxDmMAuDgEYG/9ohIKKwYBBAGXVQEFAQEHQCICN5U0guSGQd0NvStWoaer4kH/ +Aj0wIh6nnLJm/wMZAwEIB4h1BBgWCgAdBQJgb/2iAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQQzWJGPuZt38xFwEA8ZSZZY+LhRdrDdp9BLD6f5RFQ3uuZDrP24uD +W5UqNzgBAPTz+y1xPwqvOP3DWfQTwDEQ4OgayxA7QCkXnX3blCgN +=PABR +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYG/9ohYJKwYBBAHaRw8BAQdABq0Y/MyHEm/9kkYKlbLn/6nQLaNZRveQ7rEI +05Q21eS0FXVzZXJfNUBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgb/2iAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQoh00ve8HZ7I+tgD8DEKmA2dbVvfxxysC +2gUfJBagjP52ml4uLcQop7p52KUA/j2Fx6/jDOOKYgVm6xlCcV1yxuQRbPfkFXPX +5XwfpqIGuDgEYG/9ohIKKwYBBAGXVQEFAQEHQGwSQPXZ9y3XdmCe2K8l95hd9+2o +oAW7JIyLVTKIdvJIAwEIB4h1BBgWCgAdBQJgb/2iAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQoh00ve8HZ7JTeAEAkvCdKSZbPZzGaw83b/A5gjVRJM4alNOe+mrI +AYr3/mMBAN1W4zzovmuqprZZhQMzTnw67dnrRJ+hEo4O1JY+rhwA +=bLRx +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYG/9ohYJKwYBBAHaRw8BAQdAjd96ADby174AIHbcBjg6QwMFckfZ/zuIo7CS +DM8RgOi0FXVzZXJfNkBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgb/2iAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQz3Ndm7O0qI3RLAD/cKM6x7UdT7+nJtK0 +b3keDMXcNZPOh9dPQsSoU/eAYUoA/i2e5LbSAlqL6bKrKrmd+LgOiC2IaO8VjSbp +yAs8sPkGuDgEYG/9ohIKKwYBBAGXVQEFAQEHQDjgCMK/Z3TFtSm3JicId5OHeQyR +xLT8mR40Km40zaZOAwEIB4h1BBgWCgAdBQJgb/2iAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQz3Ndm7O0qI2QiAEAnceDjuS6xRoeZoGgGt0O+k+CrfUx/klT4k9M +P7SAlM8A/jtuZZLyFFQ7GMJL3+ouedGzTdLuZUcuo/0H969EQPkD +=nQ9m +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYG/9ohYJKwYBBAHaRw8BAQdAZ+mgtwLe5nKLUXH7me6OqhEcoiadRQaR/rJp +DuQA30S0FXVzZXJfN0BwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgb/2iAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQpKaMgaHHfh+mlQD/VBluYpTHpxWN0Zjt +VgwzTEdc9VRWlj54eimkRPKF0XcA/iuNm5CDYj7u2zk8/A3A3mtYvHp1dJ82iy+g +eBK3iAAEuDgEYG/9ohIKKwYBBAGXVQEFAQEHQGf2RFn/EK+EklqJBq42rEa0rP0Z +6SCboWSRUaoepK4VAwEIB4h1BBgWCgAdBQJgb/2iAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQpKaMgaHHfh8n3gEAmKLL7Q8OaF4aw5N2mfET+eSEJ9Ttk2Kv6y+U +/M+ZY1ABAJEstzNKXTxl/zuLtBIP+v7P1ALo909TA8BPLhiF/pkH +=6yHS +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYG/9ohYJKwYBBAHaRw8BAQdAMhlHJtHMexKDchAwAAjnd4mgtEx0vFi+FVgy +ITWSVUa0FXVzZXJfOEBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgb/2iAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQwXOJuelvYETajgEA8Isy+oeMpCFU34GP +NmvyXB3lMMWftlfWEcTEyzKiTh4A/jpG2fyAvLWKLh1Ui6mnPi3LU4mBYOeQIR+n +8SXOfo0IuDgEYG/9ohIKKwYBBAGXVQEFAQEHQBL1eI2fXZ+VWpOwuLR/a9WztXlD +apQ1lM7EPuaSgxhXAwEIB4h1BBgWCgAdBQJgb/2iAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQwXOJuelvYEQmXAEAv27TzaigTYhYiRO7yeiC/pCxDEAZ8NpM+JyX +S69dfUMA/jdduLFy2PiVdMdcxKfSx9eTOYcBMGyRUrBMpVZ23f4F +=e887 +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYG/9ohYJKwYBBAHaRw8BAQdAWjePtyGpev0l+Poff0ryKsNeigy/PxqfUpvN +nS5x6KS0FXVzZXJfOUBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgb/2iAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQCW1r0sdsyuumCgD+Mc2H5Dvuymmc/WxO +E8GvpuE5zcSAsX/LzaaHD0PbPdIBAPHRvoC0hbwtbZ3yOaRZxvTKPYMPe3QuLR1p +5tukVeAHuDgEYG/9ohIKKwYBBAGXVQEFAQEHQOIVZty8bHqDXOULGeyiFJOh8Psu +riA73N5C/pHOGfQVAwEIB4h1BBgWCgAdBQJgb/2iAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQCW1r0sdsyuuVRQD/TsQc21Kg+d9S6lYIwpczc839LDpmflmNrcNG +4XGtJcgBAI5c8TgQ65y46YwKLYlx+RWal8RF5mO1QxYS6wi1u/gK +=tPlZ +-----END PGP PUBLIC KEY BLOCK----- + diff --git a/pgpainless-core/src/test/resources/10_pub_keys_armored_own_with_single_header.asc b/pgpainless-core/src/test/resources/10_pub_keys_armored_own_with_single_header.asc new file mode 100644 index 00000000..1c31205b --- /dev/null +++ b/pgpainless-core/src/test/resources/10_pub_keys_armored_own_with_single_header.asc @@ -0,0 +1,110 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYHADnhYJKwYBBAHaRw8BAQdAWcIm6G/NbuOT//I4oDX5SQy7orTHZwRlU2ZU +aUhbx5S0FXVzZXJfMEBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcAOeAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQpF545ekwoUJq8AD9Gk8m5D7915NGsoHS +HKPmPkK8c0CbMWy6z+T+1A6c7eYBAL1bPflgu7bgm71uM1iPMdZ7nONKA8/fbET3 +VPBv+rIHuDgEYHADnhIKKwYBBAGXVQEFAQEHQOu3VOvQTAN968AS9IorOw9+TStn +iTy7dszubGLjg61gAwEIB4h1BBgWCgAdBQJgcAOeAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQpF545ekwoUL3aAD+KVEi8C9UDO1uU3d/UoDG3gg16IMVAXzYJas+ +cjlS3CoBALMWq/fNiCY0ZnWf0VEUCgWLKi37fmkh5WuDY3rSw2UDmDMEYHADnhYJ +KwYBBAHaRw8BAQdAQHPc/YGJo/CBOHZVoATvzsoL4POUawdcgzES6aTE6CS0FXVz +ZXJfMUBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcAOeAhsDBRYCAwEABAsJCAcF +FQoJCAsCHgECGQEACgkQqdsg7xM75EYaBQEAjnMI5WbVYTTb48zhK+iCh0BzZGrk +wDbCMATObyh6+ksBAITap4eQCsragxmxZ1zmp6BR3QnFIUGbOtpFG+l0yqAAuDgE +YHADnhIKKwYBBAGXVQEFAQEHQKXKEh3R9kLnQ+l7zAc8pnhe6FjGQyOj91FMkuOl +F34gAwEIB4h1BBgWCgAdBQJgcAOeAhsMBRYCAwEABAsJCAcFFQoJCAsCHgEACgkQ +qdsg7xM75EZ6XAEA++IpT4TzR8VHoNIWtV14RQ+3gXKt81sf27SppSux2sIBAPsV +TlTOWNi+Mlsi43XHamMdJmsGd+qKTBabOiMpWbEP +=d3FD +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYHADnhYJKwYBBAHaRw8BAQdAxIvSZayovTImA/bTF5CvP3MIJvTYH4/I0c2z +qpp+yoy0FXVzZXJfMkBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcAOeAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQJPCrOUpvTfSV3gEAm40pr5eOAjxCbvI9 +mFpqjoYIG+jNYRyJH7lOh1Le7qEBAIbMEBKafVfgoG/y+MS1Ily7ACeMtu/AasQK +vr0z8nMNuDgEYHADnhIKKwYBBAGXVQEFAQEHQNPNl8ZdmMW1NI3BorY5iSGvpyMB +ed2qLZTnM5DJlkceAwEIB4h1BBgWCgAdBQJgcAOeAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQJPCrOUpvTfQmSAEAt9aWX/fbZLXCSzF3kLRFMdZlbet+gIP0gy5r +713B18kBAPZnTvHspa0e8meKFqIKd6Eo9M2bV1w0CGnPyxNetfgMmDMEYHADnhYJ +KwYBBAHaRw8BAQdAUbRiDw8xBaR6cjC7i3M/aEeraDNzla4zRW6PiIzangi0FXVz +ZXJfM0BwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcAOeAhsDBRYCAwEABAsJCAcF +FQoJCAsCHgECGQEACgkQUoIIo7I8AwwQMAEAmJ+T2Jkh6BpgFJB/Ro/MZxywVUem +gyuSiKlaaN9V7jEA/j9BGrc7hmOIP6UOznyUpiO0m3ai53Ire3NFiPbu2+kIuDgE +YHADnhIKKwYBBAGXVQEFAQEHQHBb7p9XieiUo6GeRTHWcac5fsV/oM9eO1IyOMme +bgUiAwEIB4h1BBgWCgAdBQJgcAOeAhsMBRYCAwEABAsJCAcFFQoJCAsCHgEACgkQ +UoIIo7I8AwzcowD/ZeYEfluavtNkdYh1jJh+VdQ1X6qV8+EpjWhvCTF1GDAA/RQJ +OM3i1ZfQItFGO+AvFMVEsKjwyxwpxwwayLO01tsK +=cHw3 +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYHADnhYJKwYBBAHaRw8BAQdAPzOxVxzG/+YNvxce0sYRYwBGyyILmpiYBSes +72wFl8m0FXVzZXJfNEBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcAOeAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQOu9dMzkSLkOkvAD/ewqJrGyNfHlsECq5 +oRGdf/kbtTWMtvDd7o0qGclh1gsBAJtknvQYXcj4PmHOEJn6b+0gkd0qRrT9ZJp6 +uopdrsIMuDgEYHADnhIKKwYBBAGXVQEFAQEHQIXVUBiqtybilRGZYqdrkzTA5M2u +s11xBR5uqlWkomtcAwEIB4h1BBgWCgAdBQJgcAOeAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQOu9dMzkSLkNKjwD/aWJ4banUNSarF7r/lR145nQbJqTTTiGZj9Ko +CgxfgSkBAL/H8cs6vKXRdpUy2ODudMZpjBgLkHbx/nEU7eBGs1gCmDMEYHADnhYJ +KwYBBAHaRw8BAQdAwxtT3oMmr8JaN8/lIMch9bivmBJDSxVDT/gs7m+x7tC0FXVz +ZXJfNUBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcAOeAhsDBRYCAwEABAsJCAcF +FQoJCAsCHgECGQEACgkQLtKq0mL6zNTtJQD7BvbYhN02p6hEeyzU7gXi/ZJxN8UN +B6E6KfHeZIniKusA/iBaicNuhQgchDgmJeaY9kZlV4vrOy8MnJYwaQ2eMj0CuDgE +YHADnhIKKwYBBAGXVQEFAQEHQHt34/5sSt1K0FjYXygTrdxmqXF90M9HM4xGXEJ7 +T4ZtAwEIB4h1BBgWCgAdBQJgcAOeAhsMBRYCAwEABAsJCAcFFQoJCAsCHgEACgkQ +LtKq0mL6zNSAIgD/Ssit0wBA/BzGpLCKMlthYcvCbz+WOQZkjCsdJcnPrLEA/0AB +YMzJX/M2pR46/xCRAMrYlNiyvvUtGnI3oTjoqkkC +=HsV5 +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYHADnhYJKwYBBAHaRw8BAQdABn2aSMKWYfqlyvDZo9WH3nYArmXY10BGGmj5 +Hc3+BSK0FXVzZXJfNkBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcAOeAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQ4Lz/rI0+J/oyuwEAlQDn8+WXpTy7N0ON +lIo898tOm6wEA1+qD6VUFLkOF7EBAIjRaVdvhL1bboiPjaEub+82bjO7YlvtByuJ +kYPiKxEJuDgEYHADnhIKKwYBBAGXVQEFAQEHQMTGN0AGDonD4e8DqGJwNyGFowoU +5V2bTYQ6pNJZtQoMAwEIB4h1BBgWCgAdBQJgcAOeAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQ4Lz/rI0+J/pJFQD+MqNS4cMiNMJzCXCtv9r4h6KlwcOJtd8pMp3M +vch1EmwBAOorAVUlM6lM9UIE4Pm95tWXaX7LlF4f+Cf5DOfN8ysEmDMEYHADnhYJ +KwYBBAHaRw8BAQdAK3R53Wnf5ur7TNsHNH4pFWRmMe7780N20KTjsBxl6B20FXVz +ZXJfN0BwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcAOeAhsDBRYCAwEABAsJCAcF +FQoJCAsCHgECGQEACgkQLX1tYqznSHll5gD9E2pJdZdCNTTj8iCvG777h66VOU/9 +KhduWFol3lwk/9UA/34Hz+6bQ3n9UbXb0/gQVcxpDS5f9esNWyenRA11sYYMuDgE +YHADnhIKKwYBBAGXVQEFAQEHQFsy5afYvy+TI/M6O7kY9TUEhUgi5YuOrWJSDm9q +jDQyAwEIB4h1BBgWCgAdBQJgcAOeAhsMBRYCAwEABAsJCAcFFQoJCAsCHgEACgkQ +LX1tYqznSHl7OAEAhInPmcvBkOa68OdqEUXzqNIH+y5iu9Imbg0/xnRtDREA/1PW +GfDsHGyavWJwPrTiYn+J/Iz++MqhpGO70kk64CkG +=uQ1y +-----END PGP PUBLIC KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +mDMEYHADnhYJKwYBBAHaRw8BAQdAIQW/RjgSmrY3zW1LScBNukzKOUks+55BE+A7 +K/PlU/60FXVzZXJfOEBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcAOeAhsDBRYC +AwEABAsJCAcFFQoJCAsCHgECGQEACgkQ2ZzBGs9hEPMc2AD/X5uiPPNdaCgJ/1oT +N+bksLPDrMZ4/+uFPmJHSqb9MQIBAJP960YEL3FzsB2HL7zwKv5fOFwN3d4v6KEU +5jsw5NoPuDgEYHADnhIKKwYBBAGXVQEFAQEHQFldD7xDqYxKLGAqa3HP4UDW7S8r +5sjBUTiWvFIQ7a5/AwEIB4h1BBgWCgAdBQJgcAOeAhsMBRYCAwEABAsJCAcFFQoJ +CAsCHgEACgkQ2ZzBGs9hEPNBRAEAgZHj+w5EYbebBtpYLHoNhDjpnkWeeVUN1voM +axwVM38BALV8JwKjk8LtP8JQDPcMYN8Vcw9TdO2TdVbXJRuCeUYNmDMEYHADnhYJ +KwYBBAHaRw8BAQdAyJoVDlybYDSDH5VFJsgROW5hTMhA3QyRzZHbKOK3UR60FXVz +ZXJfOUBwZ3BhaW5sZXNzLmtleYh4BBMWCgAgBQJgcAOeAhsDBRYCAwEABAsJCAcF +FQoJCAsCHgECGQEACgkQ1XtJhM/vtFCNxQD+Jahfv9fGBNOWy7Zy6haOVlL+xLQP +HlVW0gBKmooPzbwBAJPrZom51MqpSYM9DssvbzUWlQQOeZFlXepXuIGig7YGuDgE +YHADnhIKKwYBBAGXVQEFAQEHQCL+4AjWCMUzWCsMmSJGF3WcUNOLFNR4zWsLtJl2 +2gB2AwEIB4h1BBgWCgAdBQJgcAOeAhsMBRYCAwEABAsJCAcFFQoJCAsCHgEACgkQ +1XtJhM/vtFCwNQEAwHxl/X1khZBSXlBDH98HbR+H+7gZ6RxXnfU+3HB4dYYA/2JD +W7aTCBHSayGZ1P2pXIaQGAuSUSbmqMrmjoFsQIEC +=wEh7 +-----END PGP PUBLIC KEY BLOCK----- + diff --git a/pgpainless-core/src/test/resources/10_pub_keys_armored_single_header.asc b/pgpainless-core/src/test/resources/10_pub_keys_armored_single_header.asc new file mode 100644 index 00000000..c052df62 --- /dev/null +++ b/pgpainless-core/src/test/resources/10_pub_keys_armored_single_header.asc @@ -0,0 +1,84 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGPainless + +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 +bTTvUaAF +=eAxJ +-----END PGP PUBLIC KEY BLOCK----- diff --git a/pgpainless-core/src/test/resources/10_pub_keys_binary.key b/pgpainless-core/src/test/resources/10_pub_keys_binary.key new file mode 100644 index 0000000000000000000000000000000000000000..f38fd91550e2b1a5846491c9f07407248f1012d4 GIT binary patch literal 3750 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