aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/pg/src/test/java/org/spongycastle/openpgp/examples/test/AllTests.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/pg/src/test/java/org/spongycastle/openpgp/examples/test/AllTests.java')
-rw-r--r--libraries/spongycastle/pg/src/test/java/org/spongycastle/openpgp/examples/test/AllTests.java415
1 files changed, 415 insertions, 0 deletions
diff --git a/libraries/spongycastle/pg/src/test/java/org/spongycastle/openpgp/examples/test/AllTests.java b/libraries/spongycastle/pg/src/test/java/org/spongycastle/openpgp/examples/test/AllTests.java
new file mode 100644
index 000000000..f015de6f0
--- /dev/null
+++ b/libraries/spongycastle/pg/src/test/java/org/spongycastle/openpgp/examples/test/AllTests.java
@@ -0,0 +1,415 @@
+package org.spongycastle.openpgp.examples.test;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.spongycastle.openpgp.examples.ClearSignedFileProcessor;
+import org.spongycastle.openpgp.examples.DSAElGamalKeyRingGenerator;
+import org.spongycastle.openpgp.examples.KeyBasedFileProcessor;
+import org.spongycastle.openpgp.examples.KeyBasedLargeFileProcessor;
+import org.spongycastle.openpgp.examples.PBEFileProcessor;
+import org.spongycastle.openpgp.examples.RSAKeyPairGenerator;
+import org.spongycastle.openpgp.examples.SignedFileProcessor;
+import org.spongycastle.util.encoders.Base64;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+
+public class AllTests
+ extends TestCase
+{
+ byte[] clearSignedPublicKey = Base64.decode(
+ "mQELBEQh2+wBCAD26kte0hO6flr7Y2aetpPYutHY4qsmDPy+GwmmqVeCDkX+"
+ + "r1g7DuFbMhVeu0NkKDnVl7GsJ9VarYsFYyqu0NzLa9XS2qlTIkmJV+2/xKa1"
+ + "tzjn18fT/cnAWL88ZLCOWUr241aPVhLuIc6vpHnySpEMkCh4rvMaimnTrKwO"
+ + "42kgeDGd5cXfs4J4ovRcTbc4hmU2BRVsRjiYMZWWx0kkyL2zDVyaJSs4yVX7"
+ + "Jm4/LSR1uC/wDT0IJJuZT/gQPCMJNMEsVCziRgYkAxQK3OWojPSuv4rXpyd4"
+ + "Gvo6IbvyTgIskfpSkCnQtORNLIudQSuK7pW+LkL62N+ohuKdMvdxauOnAAYp"
+ + "tBNnZ2dnZ2dnZyA8Z2dnQGdnZ2c+iQE2BBMBAgAgBQJEIdvsAhsDBgsJCAcD"
+ + "AgQVAggDBBYCAwECHgECF4AACgkQ4M/Ier3f9xagdAf/fbKWBjLQM8xR7JkR"
+ + "P4ri8YKOQPhK+VrddGUD59/wzVnvaGyl9MZE7TXFUeniQq5iXKnm22EQbYch"
+ + "v2Jcxyt2H9yptpzyh4tP6tEHl1C887p2J4qe7F2ATua9CzVGwXQSUbKtj2fg"
+ + "UZP5SsNp25guhPiZdtkf2sHMeiotmykFErzqGMrvOAUThrO63GiYsRk4hF6r"
+ + "cQ01d+EUVpY/sBcCxgNyOiB7a84sDtrxnX5BTEZDTEj8LvuEyEV3TMUuAjx1"
+ + "7Eyd+9JtKzwV4v3hlTaWOvGro9nPS7YaPuG+RtufzXCUJPbPfTjTvtGOqvEz"
+ + "oztls8tuWA0OGHba9XfX9rfgorACAAM=");
+
+ String crOnlyMessage =
+ "\r"
+ + " hello world!\r"
+ + "\r"
+ + "- dash\r";
+
+ String nlOnlyMessage =
+ "\n"
+ + " hello world!\n"
+ + "\n"
+ + "- dash\n";
+
+ String crNlMessage =
+ "\r\n"
+ + " hello world!\r\n"
+ + "\r\n"
+ + "- dash\r\n";
+
+ String crNlMessageTrailingWhiteSpace =
+ "\r\n"
+ + " hello world! \t\r\n"
+ + "\r\n"
+ + "\r\n";
+
+ String crOnlySignedMessage =
+ "-----BEGIN PGP SIGNED MESSAGE-----\r"
+ + "Hash: SHA256\r"
+ + "\r"
+ + "\r"
+ + " hello world!\r"
+ + "\r"
+ + "- - dash\r"
+ + "-----BEGIN PGP SIGNATURE-----\r"
+ + "Version: GnuPG v1.4.2.1 (GNU/Linux)\r"
+ + "\r"
+ + "iQEVAwUBRCNS8+DPyHq93/cWAQi6SwgAj3ItmSLr/sd/ixAQLW7/12jzEjfNmFDt\r"
+ + "WOZpJFmXj0fnMzTrOILVnbxHv2Ru+U8Y1K6nhzFSR7d28n31/XGgFtdohDEaFJpx\r"
+ + "Fl+KvASKIonnpEDjFJsPIvT1/G/eCPalwO9IuxaIthmKj0z44SO1VQtmNKxdLAfK\r"
+ + "+xTnXGawXS1WUE4CQGPM45mIGSqXcYrLtJkAg3jtRa8YRUn2d7b2BtmWH+jVaVuC\r"
+ + "hNrXYv7iHFOu25yRWhUQJisvdC13D/gKIPRvARXPgPhAC2kovIy6VS8tDoyG6Hm5\r"
+ + "dMgLEGhmqsgaetVq1ZIuBZj5S4j2apBJCDpF6GBfpBOfwIZs0Tpmlw==\r"
+ + "=84Nd\r"
+ + "-----END PGP SIGNATURE-----\r";
+
+
+ String nlOnlySignedMessage =
+ "-----BEGIN PGP SIGNED MESSAGE-----\n"
+ + "Hash: SHA256\n"
+ + "\n"
+ + "\n"
+ + " hello world!\n"
+ + "\n"
+ + "- - dash\n"
+ + "-----BEGIN PGP SIGNATURE-----\n"
+ + "Version: GnuPG v1.4.2.1 (GNU/Linux)\n"
+ + "\n"
+ + "iQEVAwUBRCNS8+DPyHq93/cWAQi6SwgAj3ItmSLr/sd/ixAQLW7/12jzEjfNmFDt\n"
+ + "WOZpJFmXj0fnMzTrOILVnbxHv2Ru+U8Y1K6nhzFSR7d28n31/XGgFtdohDEaFJpx\n"
+ + "Fl+KvASKIonnpEDjFJsPIvT1/G/eCPalwO9IuxaIthmKj0z44SO1VQtmNKxdLAfK\n"
+ + "+xTnXGawXS1WUE4CQGPM45mIGSqXcYrLtJkAg3jtRa8YRUn2d7b2BtmWH+jVaVuC\n"
+ + "hNrXYv7iHFOu25yRWhUQJisvdC13D/gKIPRvARXPgPhAC2kovIy6VS8tDoyG6Hm5\n"
+ + "dMgLEGhmqsgaetVq1ZIuBZj5S4j2apBJCDpF6GBfpBOfwIZs0Tpmlw==\n"
+ + "=84Nd\n"
+ + "-----END PGP SIGNATURE-----\n";
+
+ String crNlSignedMessage =
+ "-----BEGIN PGP SIGNED MESSAGE-----\r\n"
+ + "Hash: SHA256\r\n"
+ + "\r\n"
+ + "\r\n"
+ + " hello world!\r\n"
+ + "\r\n"
+ + "- - dash\r\n"
+ + "-----BEGIN PGP SIGNATURE-----\r\n"
+ + "Version: GnuPG v1.4.2.1 (GNU/Linux)\r\n"
+ + "\r\n"
+ + "iQEVAwUBRCNS8+DPyHq93/cWAQi6SwgAj3ItmSLr/sd/ixAQLW7/12jzEjfNmFDt\r\n"
+ + "WOZpJFmXj0fnMzTrOILVnbxHv2Ru+U8Y1K6nhzFSR7d28n31/XGgFtdohDEaFJpx\r\n"
+ + "Fl+KvASKIonnpEDjFJsPIvT1/G/eCPalwO9IuxaIthmKj0z44SO1VQtmNKxdLAfK\r\n"
+ + "+xTnXGawXS1WUE4CQGPM45mIGSqXcYrLtJkAg3jtRa8YRUn2d7b2BtmWH+jVaVuC\r\n"
+ + "hNrXYv7iHFOu25yRWhUQJisvdC13D/gKIPRvARXPgPhAC2kovIy6VS8tDoyG6Hm5\r\n"
+ + "dMgLEGhmqsgaetVq1ZIuBZj5S4j2apBJCDpF6GBfpBOfwIZs0Tpmlw==\r\n"
+ + "=84Nd\r"
+ + "-----END PGP SIGNATURE-----\r\n";
+
+ String crNlSignedMessageTrailingWhiteSpace =
+ "-----BEGIN PGP SIGNED MESSAGE-----\r\n"
+ + "Hash: SHA256\r\n"
+ + "\r\n"
+ + "\r\n"
+ + " hello world! \t\r\n"
+ + "\r\n"
+ + "- - dash\r\n"
+ + "-----BEGIN PGP SIGNATURE-----\r\n"
+ + "Version: GnuPG v1.4.2.1 (GNU/Linux)\r\n"
+ + "\r\n"
+ + "iQEVAwUBRCNS8+DPyHq93/cWAQi6SwgAj3ItmSLr/sd/ixAQLW7/12jzEjfNmFDt\r\n"
+ + "WOZpJFmXj0fnMzTrOILVnbxHv2Ru+U8Y1K6nhzFSR7d28n31/XGgFtdohDEaFJpx\r\n"
+ + "Fl+KvASKIonnpEDjFJsPIvT1/G/eCPalwO9IuxaIthmKj0z44SO1VQtmNKxdLAfK\r\n"
+ + "+xTnXGawXS1WUE4CQGPM45mIGSqXcYrLtJkAg3jtRa8YRUn2d7b2BtmWH+jVaVuC\r\n"
+ + "hNrXYv7iHFOu25yRWhUQJisvdC13D/gKIPRvARXPgPhAC2kovIy6VS8tDoyG6Hm5\r\n"
+ + "dMgLEGhmqsgaetVq1ZIuBZj5S4j2apBJCDpF6GBfpBOfwIZs0Tpmlw==\r\n"
+ + "=84Nd\r"
+ + "-----END PGP SIGNATURE-----\r\n";
+
+ private PrintStream _oldOut;
+ private PrintStream _oldErr;
+
+ private ByteArrayOutputStream _currentOut;
+ private ByteArrayOutputStream _currentErr;
+
+ public void setUp()
+ throws Exception
+ {
+ _oldOut = System.out;
+ _oldErr = System.err;
+ _currentOut = new ByteArrayOutputStream();
+ _currentErr = new ByteArrayOutputStream();
+
+ System.setOut(new PrintStream(_currentOut));
+ System.setErr(new PrintStream(_currentErr));
+ }
+
+ public void tearDown()
+ {
+ System.setOut(_oldOut);
+ System.setErr(_oldErr);
+ }
+
+ public void testRSAKeyGeneration()
+ throws Exception
+ {
+ RSAKeyPairGenerator.main(new String[] { "test", "password" });
+
+ createSmallTestInput();
+ createLargeTestInput();
+
+ checkSigning("bpg");
+ checkKeyBasedEncryption("bpg");
+ checkLargeKeyBasedEncryption("bpg");
+
+ RSAKeyPairGenerator.main(new String[] { "-a", "test", "password" });
+
+ checkSigning("asc");
+ checkKeyBasedEncryption("asc");
+ checkLargeKeyBasedEncryption("asc");
+ }
+
+ public void testDSAElGamaleKeyGeneration()
+ throws Exception
+ {
+ DSAElGamalKeyRingGenerator.main(new String[] { "test", "password" });
+
+ createSmallTestInput();
+ createLargeTestInput();
+
+ checkSigning("bpg");
+ checkKeyBasedEncryption("bpg");
+ checkLargeKeyBasedEncryption("bpg");
+
+ DSAElGamalKeyRingGenerator.main(new String[] { "-a", "test", "password" });
+
+ checkSigning("asc");
+ checkKeyBasedEncryption("asc");
+ checkLargeKeyBasedEncryption("asc");
+ }
+
+ public void testPBEEncryption()
+ throws Exception
+ {
+ _currentErr.reset();
+
+ PBEFileProcessor.main(new String[] { "-e", "test.txt", "password" });
+
+ PBEFileProcessor.main(new String[] { "-d", "test.txt.bpg", "password" });
+
+ assertEquals("no message integrity check", getLine(_currentErr));
+
+ PBEFileProcessor.main(new String[] { "-e", "-i", "test.txt", "password" });
+
+ PBEFileProcessor.main(new String[] { "-d", "test.txt.bpg", "password" });
+
+ assertEquals("message integrity check passed", getLine(_currentErr));
+
+ PBEFileProcessor.main(new String[] { "-e", "-ai", "test.txt", "password" });
+
+ PBEFileProcessor.main(new String[] { "-d", "test.txt.asc", "password" });
+
+ assertEquals("message integrity check passed", getLine(_currentErr));
+ }
+
+ public void testClearSigned()
+ throws Exception
+ {
+ createTestFile(clearSignedPublicKey, "pub.bpg");
+
+ checkClearSignedVerify(nlOnlySignedMessage);
+ checkClearSignedVerify(crOnlySignedMessage);
+ checkClearSignedVerify(crNlSignedMessage);
+ checkClearSignedVerify(crNlSignedMessageTrailingWhiteSpace);
+
+ ClearSignedFileProcessor.main(new String[] { "-v", "test.txt.asc", "pub.bpg" });
+
+ RSAKeyPairGenerator.main(new String[] { "test", "password" });
+
+ checkClearSigned(crOnlyMessage);
+ checkClearSigned(nlOnlyMessage);
+ checkClearSigned(crNlMessage);
+ checkClearSigned(crNlMessageTrailingWhiteSpace);
+ }
+
+ public void testClearSignedBogusInput()
+ throws Exception
+ {
+ createTestFile(clearSignedPublicKey, "test.txt");
+
+ ClearSignedFileProcessor.main(new String[] { "-s", "test.txt", "secret.bpg", "password" });
+ }
+
+ private void checkClearSignedVerify(String message)
+ throws Exception
+ {
+ createTestData(message, "test.txt.asc");
+
+ ClearSignedFileProcessor.main(new String[] { "-v", "test.txt.asc", "pub.bpg" });
+ }
+
+ private void checkClearSigned(String message)
+ throws Exception
+ {
+ createTestData(message, "test.txt");
+
+ ClearSignedFileProcessor.main(new String[] { "-s", "test.txt", "secret.bpg", "password" });
+ ClearSignedFileProcessor.main(new String[] { "-v", "test.txt.asc", "pub.bpg" });
+ }
+
+ private void checkSigning(String type)
+ throws Exception
+ {
+ _currentOut.reset();
+
+ SignedFileProcessor.main(new String[] { "-s", "test.txt", "secret." + type, "password" });
+
+ SignedFileProcessor.main(new String[] { "-v", "test.txt.bpg", "pub." + type });
+
+ assertEquals("signature verified.", getLine(_currentOut));
+
+ SignedFileProcessor.main(new String[] { "-s", "-a", "test.txt", "secret." + type, "password" });
+
+ SignedFileProcessor.main(new String[] { "-v", "test.txt.asc", "pub." + type });
+
+ assertEquals("signature verified.", getLine(_currentOut));
+ }
+
+ private void checkKeyBasedEncryption(String type)
+ throws Exception
+ {
+ _currentErr.reset();
+
+ KeyBasedFileProcessor.main(new String[] { "-e", "test.txt", "pub." + type });
+
+ KeyBasedFileProcessor.main(new String[] { "-d", "test.txt.bpg", "secret." + type, "password" });
+
+ assertEquals("no message integrity check", getLine(_currentErr));
+
+ KeyBasedFileProcessor.main(new String[] { "-e", "-i", "test.txt", "pub." + type });
+
+ KeyBasedFileProcessor.main(new String[] { "-d", "test.txt.bpg", "secret." + type, "password" });
+
+ assertEquals("message integrity check passed", getLine(_currentErr));
+
+ KeyBasedFileProcessor.main(new String[] { "-e", "-ai", "test.txt", "pub." + type });
+
+ KeyBasedFileProcessor.main(new String[] { "-d", "test.txt.asc", "secret." + type, "password" });
+
+ assertEquals("message integrity check passed", getLine(_currentErr));
+ }
+
+ private void checkLargeKeyBasedEncryption(String type)
+ throws Exception
+ {
+ _currentErr.reset();
+
+ KeyBasedLargeFileProcessor.main(new String[] { "-e", "large.txt", "pub." + type });
+
+ KeyBasedLargeFileProcessor.main(new String[] { "-d", "large.txt.bpg", "secret." + type, "password" });
+
+ assertEquals("no message integrity check", getLine(_currentErr));
+
+ KeyBasedLargeFileProcessor.main(new String[] { "-e", "-i", "large.txt", "pub." + type });
+
+ KeyBasedLargeFileProcessor.main(new String[] { "-d", "large.txt.bpg", "secret." + type, "password" });
+
+ assertEquals("message integrity check passed", getLine(_currentErr));
+
+ KeyBasedLargeFileProcessor.main(new String[] { "-e", "-ai", "large.txt", "pub." + type });
+
+ KeyBasedLargeFileProcessor.main(new String[] { "-d", "large.txt.asc", "secret." + type, "password" });
+
+ assertEquals("message integrity check passed", getLine(_currentErr));
+ }
+
+ private void createSmallTestInput()
+ throws IOException
+ {
+ BufferedWriter bfOut = new BufferedWriter(new FileWriter("test.txt"));
+
+ bfOut.write("hello world!");
+ bfOut.newLine();
+
+ bfOut.close();
+ }
+
+ private void createLargeTestInput()
+ throws IOException
+ {
+ BufferedWriter bfOut = new BufferedWriter(new FileWriter("large.txt"));
+
+ for (int i = 0; i != 2000; i++)
+ {
+ bfOut.write("hello world!");
+ bfOut.newLine();
+ }
+
+ bfOut.close();
+ }
+
+ private void createTestData(String testData, String name)
+ throws IOException
+ {
+ BufferedWriter bfOut = new BufferedWriter(new FileWriter(name));
+
+ bfOut.write(testData);
+
+ bfOut.close();
+ }
+
+ private void createTestFile(byte[] keyData, String name)
+ throws IOException
+ {
+ FileOutputStream fOut = new FileOutputStream(name);
+
+ fOut.write(keyData);
+
+ fOut.close();
+ }
+
+ private String getLine(
+ ByteArrayOutputStream out)
+ throws IOException
+ {
+ BufferedReader bRd = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(out.toByteArray())));
+
+ out.reset();
+
+ return bRd.readLine();
+ }
+
+ public static void main (String[] args)
+ {
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite("OpenPGP Example Tests");
+
+ suite.addTestSuite(AllTests.class);
+
+ return suite;
+ }
+}