Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/humla-spongycastle.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'pg/src/test/java/org/spongycastle/openpgp/test/PGPArmoredTest.java')
-rw-r--r--pg/src/test/java/org/spongycastle/openpgp/test/PGPArmoredTest.java255
1 files changed, 255 insertions, 0 deletions
diff --git a/pg/src/test/java/org/spongycastle/openpgp/test/PGPArmoredTest.java b/pg/src/test/java/org/spongycastle/openpgp/test/PGPArmoredTest.java
new file mode 100644
index 00000000..e6647026
--- /dev/null
+++ b/pg/src/test/java/org/spongycastle/openpgp/test/PGPArmoredTest.java
@@ -0,0 +1,255 @@
+package org.spongycastle.openpgp.test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+
+import org.spongycastle.bcpg.ArmoredInputStream;
+import org.spongycastle.bcpg.ArmoredOutputStream;
+import org.spongycastle.openpgp.jcajce.JcaPGPObjectFactory;
+import org.spongycastle.util.Arrays;
+import org.spongycastle.util.Strings;
+import org.spongycastle.util.encoders.Base64;
+import org.spongycastle.util.encoders.Hex;
+import org.spongycastle.util.test.SimpleTest;
+
+public class PGPArmoredTest
+ extends SimpleTest
+{
+ byte[] sample = Base64.decode(
+ "mQGiBEA83v0RBADzKVLVCnpWQxX0LCsevw/3OLs0H7MOcLBQ4wMO9sYmzGYn"
+ + "xpVj+4e4PiCP7QBayWyy4lugL6Lnw7tESvq3A4v3fefcxaCTkJrryiKn4+Cg"
+ + "y5rIBbrSKNtCEhVi7xjtdnDjP5kFKgHYjVOeIKn4Cz/yzPG3qz75kDknldLf"
+ + "yHxp2wCgwW1vAE5EnZU4/UmY7l8kTNkMltMEAJP4/uY4zcRwLI9Q2raPqAOJ"
+ + "TYLd7h+3k/BxI0gIw96niQ3KmUZDlobbWBI+VHM6H99vcttKU3BgevNf8M9G"
+ + "x/AbtW3SS4De64wNSU3189XDG8vXf0vuyW/K6Pcrb8exJWY0E1zZQ1WXT0gZ"
+ + "W0kH3g5ro//Tusuil9q2lVLF2ovJA/0W+57bPzi318dWeNs0tTq6Njbc/GTG"
+ + "FUAVJ8Ss5v2u6h7gyJ1DB334ExF/UdqZGldp0ugkEXaSwBa2R7d3HBgaYcoP"
+ + "Ck1TrovZzEY8gm7JNVy7GW6mdOZuDOHTxyADEEP2JPxh6eRcZbzhGuJuYIif"
+ + "IIeLOTI5Dc4XKeV32a+bWrQidGVzdCAoVGVzdCBrZXkpIDx0ZXN0QHViaWNh"
+ + "bGwuY29tPohkBBMRAgAkBQJAPN79AhsDBQkB4TOABgsJCAcDAgMVAgMDFgIB"
+ + "Ah4BAheAAAoJEJh8Njfhe8KmGDcAoJWr8xgPr75y/Cp1kKn12oCCOb8zAJ4p"
+ + "xSvk4K6tB2jYbdeSrmoWBZLdMLACAAC5AQ0EQDzfARAEAJeUAPvUzJJbKcc5"
+ + "5Iyb13+Gfb8xBWE3HinQzhGr1v6A1aIZbRj47UPAD/tQxwz8VAwJySx82ggN"
+ + "LxCk4jW9YtTL3uZqfczsJngV25GoIN10f4/j2BVqZAaX3q79a3eMiql1T0oE"
+ + "AGmD7tO1LkTvWfm3VvA0+t8/6ZeRLEiIqAOHAAQNBACD0mVMlAUgd7REYy/1"
+ + "mL99Zlu9XU0uKyUex99sJNrcx1aj8rIiZtWaHz6CN1XptdwpDeSYEOFZ0PSu"
+ + "qH9ByM3OfjU/ya0//xdvhwYXupn6P1Kep85efMBA9jUv/DeBOzRWMFG6sC6y"
+ + "k8NGG7Swea7EHKeQI40G3jgO/+xANtMyTIhPBBgRAgAPBQJAPN8BAhsMBQkB"
+ + "4TOAAAoJEJh8Njfhe8KmG7kAn00mTPGJCWqmskmzgdzeky5fWd7rAKCNCp3u"
+ + "ZJhfg0htdgAfIy8ppm05vLACAAA=");
+
+ byte[] marker = Hex.decode("2d2d2d2d2d454e4420504750205055424c4943204b455920424c4f434b2d2d2d2d2d");
+
+ // Contains "Hello World!" as an armored message
+ // The 'blank line' after the headers contains (legal) whitespace - see RFC2440 6.2
+ private static final String blankLineData =
+ "-----BEGIN PGP MESSAGE-----\n"
+ + "Version: BCPG v1.32\n"
+ + "Comment: A dummy message\n"
+ + " \t \t\n"
+ + "SGVsbG8gV29ybGQh\n"
+ + "=d9Xi\n"
+ + "-----END PGP MESSAGE-----\n";
+
+ private int markerCount(
+ byte[] data)
+ {
+ int ind = 0;
+ int matches = 0;
+
+ while (ind < data.length)
+ {
+ if (data[ind] == 0x2d)
+ {
+ int count = 0;
+ while (count < marker.length)
+ {
+ if (data[ind + count] != marker[count])
+ {
+ break;
+ }
+ count++;
+ }
+
+ if (count == marker.length)
+ {
+ matches++;
+ }
+
+ ind += count;
+ }
+ else
+ {
+ ind++;
+ }
+ }
+
+ return matches;
+ }
+
+ private void blankLineTest() throws Exception
+ {
+ byte[] blankLineBytes = Strings.toByteArray(blankLineData);
+ ByteArrayInputStream bIn = new ByteArrayInputStream(blankLineBytes);
+ ArmoredInputStream aIn = new ArmoredInputStream(bIn, true);
+
+ ByteArrayOutputStream bOut = new ByteArrayOutputStream();
+ int c;
+ while ((c = aIn.read()) >= 0)
+ {
+ bOut.write(c);
+ }
+
+ byte[] expected = Strings.toByteArray("Hello World!");
+
+ if (!Arrays.areEqual(expected, bOut.toByteArray()))
+ {
+ fail("Incorrect message retrieved in blank line test.");
+ }
+ }
+
+ public void performTest()
+ throws Exception
+ {
+ //
+ // test immediate close
+ //
+ ByteArrayOutputStream bOut = new ByteArrayOutputStream();
+ ArmoredOutputStream aOut = new ArmoredOutputStream(bOut);
+
+ aOut.close();
+
+ byte[] data = bOut.toByteArray();
+
+ if (data.length != 0)
+ {
+ fail("No data should have been written");
+ }
+
+ //
+ // multiple close
+ //
+ bOut = new ByteArrayOutputStream();
+ aOut = new ArmoredOutputStream(bOut);
+
+ aOut.write(sample);
+
+ aOut.close();
+
+ aOut.close();
+
+ int mc = markerCount(bOut.toByteArray());
+
+ if (mc < 1)
+ {
+ fail("No end marker found");
+ }
+
+ if (mc > 1)
+ {
+ fail("More than one end marker found");
+ }
+
+ //
+ // writing and reading single objects
+ //
+ bOut = new ByteArrayOutputStream();
+ aOut = new ArmoredOutputStream(bOut);
+
+ aOut.write(sample);
+
+ aOut.close();
+
+ ArmoredInputStream aIn = new ArmoredInputStream(new ByteArrayInputStream(bOut.toByteArray()));
+
+ JcaPGPObjectFactory fact = new JcaPGPObjectFactory(aIn);
+ int count = 0;
+
+ while (fact.nextObject() != null)
+ {
+ count++;
+ }
+
+ if (count != 1)
+ {
+ fail("wrong number of objects found: " + count);
+ }
+
+ //
+ // writing and reading multiple objects - in single block
+ //
+ bOut = new ByteArrayOutputStream();
+ aOut = new ArmoredOutputStream(bOut);
+
+ aOut.write(sample);
+ aOut.write(sample);
+
+ aOut.close();
+
+ aIn = new ArmoredInputStream(new ByteArrayInputStream(bOut.toByteArray()));
+
+ fact = new JcaPGPObjectFactory(aIn);
+ count = 0;
+
+ while (fact.nextObject() != null)
+ {
+ count++;
+ }
+
+ if (count != 2)
+ {
+ fail("wrong number of objects found: " + count);
+ }
+
+ //
+ // writing and reading multiple objects - in single block
+ //
+ bOut = new ByteArrayOutputStream();
+ aOut = new ArmoredOutputStream(bOut);
+
+ aOut.write(sample);
+
+ aOut.close(); // does not close underlying stream
+
+ aOut = new ArmoredOutputStream(bOut);
+
+ aOut.write(sample);
+
+ aOut.close();
+
+ aIn = new ArmoredInputStream(new ByteArrayInputStream(bOut.toByteArray()));
+
+ count = 0;
+ boolean atLeastOne;
+ do
+ {
+ atLeastOne = false;
+ fact = new JcaPGPObjectFactory(aIn);
+
+ while (fact.nextObject() != null)
+ {
+ atLeastOne = true;
+ count++;
+ }
+ }
+ while (atLeastOne);
+
+ if (count != 2)
+ {
+ fail("wrong number of objects found: " + count);
+ }
+
+ blankLineTest();
+ }
+
+ public String getName()
+ {
+ return "PGPArmoredTest";
+ }
+
+ public static void main(
+ String[] args)
+ {
+ runTest(new PGPArmoredTest());
+ }
+}