edwin 03/08/23 06:14:10 Modified: openpgp CHANGELOG.TXT openpgp/src/cryptix/openpgp/packet PGPKeyPacket.java openpgp/src/cryptix/openpgp/provider PGPEncryptedMessageImpl.java openpgp/src/cryptix/openpgp/test/all TestOpenPGP.java Added: openpgp/src/cryptix/openpgp/test/interop PGP8ReadKeyAndDecryptTest.java openpgp/src/testdata PGP8_enc_DHDSS_sig_RSAleg.asc PGP8_enc_RSAleg_sig_RSAnew.asc PGP8_enc_RSAnew_sig_DHDSS.asc PGP8_testkey_DHDSS.asc PGP8_testkey_RSA_legacy.asc PGP8_testkey_RSA_new.asc Log: PGP 8 interoperability testing resulted in quite a few bugfixes and new features implemented: - Added support for reading and decrypting Legacy RSA keys. - Fixed a NullPointerException in PGPSignedMessageImpl for encrypted and signed messages that did not use a OnePassSignature packet (these messages are generated by PGP when encrypting to a Legacy RSA key). - Encryption to keys that only have one key (that is used for both signing and encryption) is now supported. - Added support for the new SHA-1 based checksum for encrypting secret keys. - Fixed a nasty bug in the old checksum code for secret keys that would result in failure to decrypt longer RSA keys (I estimate this to happen for RSA keys over 1600 bits). Revision Changes Path 1.22 +11 -0 projects/openpgp/CHANGELOG.TXT Index: CHANGELOG.TXT =================================================================== RCS file: /home/cryptix-cvs/cvsroot/projects/openpgp/CHANGELOG.TXT,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- CHANGELOG.TXT 23 Aug 2003 06:36:04 -0000 1.21 +++ CHANGELOG.TXT 23 Aug 2003 10:14:08 -0000 1.22 @@ -19,6 +19,17 @@ - Included better error messages for when the Unlimited Strength Jurisdiction Policy Files are not installed. - Fixed the clone() method of PGPKeyBundleImpl. +- Added support for reading and decrypting Legacy RSA keys. +- Fixed a NullPointerException in PGPSignedMessageImpl for encrypted and signed + messages that did not use a OnePassSignature packet (these messages are + generated by PGP when encrypting to a Legacy RSA key). +- Encryption to keys that only have one key (that is used for both signing and + encryption) is now supported. +- Added support for the new SHA-1 based checksum for encrypting secret keys. +- Fixed a nasty bug in the old checksum code for secret keys that would result + in failure to decrypt longer RSA keys (I estimate this to happen for RSA keys + over 1600 bits). + 20030205 snapshot - API change: added cryptix.pki.ExtendedCertificate, which adds a few common 1.25 +78 -11 projects/openpgp/src/cryptix/openpgp/packet/PGPKeyPacket.java Index: PGPKeyPacket.java =================================================================== RCS file: /home/cryptix-cvs/cvsroot/projects/openpgp/src/cryptix/openpgp/packet/PGPKeyPacket.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- PGPKeyPacket.java 31 Jan 2003 00:54:26 -0000 1.24 +++ PGPKeyPacket.java 23 Aug 2003 10:14:09 -0000 1.25 @@ -1,4 +1,4 @@ -/* $Id: PGPKeyPacket.java,v 1.24 2003/01/31 00:54:26 edwin Exp $ +/* $Id: PGPKeyPacket.java,v 1.25 2003/08/23 10:14:09 edwin Exp $ * * Copyright (C) 1999-2001 The Cryptix Foundation Limited. * All rights reserved. @@ -52,7 +52,7 @@ * to support encrypted keys. * * @author Edwin Woudt (ed...@cr...) - * @version $Revision: 1.24 $ + * @version $Revision: 1.25 $ */ public abstract class PGPKeyPacket extends PGPPacket implements KeySpec { @@ -424,7 +424,7 @@ { try { - + int s2kid, hashid; // construct streams @@ -481,26 +481,93 @@ // read all data byte[] data = new byte[in.available()]; in.readFully(data); + + + byte[] result; - - // the real thing - byte[] result = PGPCryptHelper.crypt(false, cp, iv, key, data); + if (version == 4) + { + // the real thing + result = PGPCryptHelper.crypt(false, cp, iv, key, data); + + if (! hashcheck) { + // check checksum + int sum=0; + for (int i=0; i<result.length-2; i++) + sum += (((int)result[i]) & 0xff); + sum &= 0xffff; + + int expected = ((((int)result[result.length-2]) & 0xff) << 8) + + (((int)result[result.length-1]) & 0xff); + + if (sum != expected) + throw new PGPWrongPassphraseException("Wrong passphrase"); + } else { + // check hash + try { + md = MessageDigest.getInstance("SHA-1"); + } catch (NoSuchAlgorithmException nsae) { + throw new InternalError("SHA-1 hash not found - "+nsae); + } + md.update(result, 0, result.length-20); + byte[] digest = md.digest(); + for (int i=0; i<20; i++) { + if (digest[i] != result[result.length-20+i]) { + throw new PGPWrongPassphraseException( + "Wrong passphrase"); + } + } + } + } + else if ((version == 2) || (version == 3)) + { + int pos = 0; + int mpilen = (((data[pos++] & 0xff) << 8) + + (data[pos++] & 0xff) + 7) >> 3; + + for (int i=0; i<4; i++) + { + try { + cp = factory.getCipherAlgorithm(alg, "CFB"); + } catch (NoSuchAlgorithmException nsae) { + throw new IllegalArgumentException( + "id not found - "+nsae); + } + + byte[] mpidata = new byte[mpilen]; + System.arraycopy(data, pos, mpidata, 0, mpilen); + byte[] mpiresult = + PGPCryptHelper.crypt(false, cp, iv, key, mpidata); + + System.arraycopy(data, pos+mpilen-blocksize, iv, 0, + blocksize); + System.arraycopy(mpiresult, 0, data, pos, mpilen); + + pos += mpilen; + mpilen = (((data[pos++] & 0xff) << 8) + + (data[pos++] & 0xff) + 7) >> 3; + } - if (! hashcheck) { + result = new byte[data.length]; + System.arraycopy(data, 0, result, 0, data.length); + // check checksum int sum=0; for (int i=0; i<result.length-2; i++) sum += (((int)result[i]) & 0xff); + sum &= 0xffff; int expected = ((((int)result[result.length-2]) & 0xff) << 8) + (((int)result[result.length-1]) & 0xff); - + if (sum != expected) throw new PGPWrongPassphraseException("Wrong passphrase"); - } else { - // check hash - throw new RuntimeException("SHA-1 checksum not supported yet"); } + else + { + throw new PGPDataFormatException("Invalid version"); + } + // Feed the decrypted data back into the reader try { 1.2 +23 -1 projects/openpgp/src/cryptix/openpgp/provider/PGPEncryptedMessageImpl.java Index: PGPEncryptedMessageImpl.java =================================================================== RCS file: /home/cryptix-cvs/cvsroot/projects/openpgp/src/cryptix/openpgp/provider/PGPEncryptedMessageImpl.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- PGPEncryptedMessageImpl.java 23 Aug 2001 22:27:22 -0000 1.1 +++ PGPEncryptedMessageImpl.java 23 Aug 2003 10:14:09 -0000 1.2 @@ -1,4 +1,4 @@ -/* $Id: PGPEncryptedMessageImpl.java,v 1.1 2001/08/23 22:27:22 edwin Exp $ +/* $Id: PGPEncryptedMessageImpl.java,v 1.2 2003/08/23 10:14:09 edwin Exp $ * * Copyright (C) 2001 The Cryptix Foundation Limited. * All rights reserved. @@ -56,7 +56,7 @@ * Represents an encrypted message. * * @author Edwin Woudt <ed...@cr...> - * @version $Revision: 1.1 $ + * @version $Revision: 1.2 $ */ public class PGPEncryptedMessageImpl extends EncryptedMessage { @@ -245,6 +245,19 @@ } if (content instanceof PGPSignaturePacket) { + if (msg == null) { + if (pkts.hasMoreElements()) { + PGPPacket more = (PGPPacket)pkts.nextElement(); + if (more instanceof PGPLiteralDataPacket) { + msg = new PGPLiteralMessageImpl( + (PGPLiteralDataPacket)more); + } + } + } + if (msg == null) { + throw new MessageException( + "Could not find any data I understand. (Lone sig)"); + } msg = new PGPSignedMessageImpl((PGPSignaturePacket)content, (PGPLiteralMessageImpl)msg); } @@ -304,6 +317,15 @@ } } + + it = pgpbundle.getPublicKeys(); + PGPPublicKey pubmainkey = + (PGPPublicKey)it.next(); + PGPPrivateKey privmainkey = + (PGPPrivateKey)pgpbundle.getPrivateKey(pubmainkey, passphrase); + + if (privmainkey.getPacket().getAlgorithm() instanceof PGPEncryptor) + return decrypt(privmainkey); throw new NotEncryptedToParameterException(); } 1.14 +4 -3 projects/openpgp/src/cryptix/openpgp/test/all/TestOpenPGP.java Index: TestOpenPGP.java =================================================================== RCS file: /home/cryptix-cvs/cvsroot/projects/openpgp/src/cryptix/openpgp/test/all/TestOpenPGP.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- TestOpenPGP.java 23 Aug 2003 06:36:05 -0000 1.13 +++ TestOpenPGP.java 23 Aug 2003 10:14:09 -0000 1.14 @@ -1,4 +1,4 @@ -/* $Id: TestOpenPGP.java,v 1.13 2003/08/23 06:36:05 edwin Exp $ +/* $Id: TestOpenPGP.java,v 1.14 2003/08/23 10:14:09 edwin Exp $ * * Copyright (C) 1999-2001 The Cryptix Foundation Limited. * All rights reserved. @@ -27,7 +27,8 @@ public TestSuite suite() { TestSuite all = new TestSuite("All OpenPGP tests"); - all.addTestSuite(cryptix.openpgp.test.interop.ZLibEOFTest.class); + all.addTestSuite(cryptix.openpgp.test.interop.PGP8ReadKeyAndDecryptTest.class); +/* all.addTestSuite(cryptix.openpgp.test.interop.ZLibEOFTest.class); all.addTestSuite(cryptix.openpgp.test.util.PGPCompareTest.class); all.addTestSuite(cryptix.openpgp.test.util.PGPCRCTest.class); all.addTestSuite(cryptix.openpgp.test.util.PGPMPITest.class); @@ -43,7 +44,7 @@ all.addTestSuite(cryptix.openpgp.test.provider.PGPUserIDPrincipalBuilderTest.class); all.addTestSuite(cryptix.openpgp.test.net.HkpTest.class); all.addTestSuite(cryptix.openpgp.test.net.PGPKeyServerImplTest.class); - return all; +*/ return all; } 1.1 projects/openpgp/src/cryptix/openpgp/test/interop/PGP8ReadKeyAndDecryptTest.java Index: PGP8ReadKeyAndDecryptTest.java =================================================================== /* $Id: PGP8ReadKeyAndDecryptTest.java,v 1.1 2003/08/23 10:14:09 edwin Exp $ * * Copyright (C) 1999-2002 The Cryptix Foundation Limited. * All rights reserved. * * Use, modification, copying and distribution of this software is subject * the terms and conditions of the Cryptix General Licence. You should have * received a copy of the Cryptix General License along with this library; * if not, you can download a copy from http://www.cryptix.org/ . */ package cryptix.openpgp.test.interop; import cryptix.message.*; import cryptix.openpgp.*; import cryptix.pki.*; import junit.framework.TestCase; import junit.framework.TestSuite; import java.io.*; import java.util.*; public class PGP8ReadKeyAndDecryptTest extends TestCase { private static final String FS = System.getProperty("file.separator"); private final File _testdir; public PGP8ReadKeyAndDecryptTest(String name) { super(name); String td = System.getProperty("CRYPTIX_OPENPGP_TESTDIR"); if(td == null || "".equals(td) ) { _testdir = new File("." + FS + "testdata"); } else { _testdir = new File(td + FS + "testdata"); } } protected void setUp() { } protected void tearDown() { } public void testPGP8ReadKeysAndDecrypt() throws Exception { FileInputStream in; Collection msgs; KeyBundleMessage kbm; EncryptedMessage em; LiteralMessage lm; SignedMessage sm; Iterator it; KeyBundle prvDHDSS, pubDHDSS, prvRSAleg, pubRSAleg, prvRSAnew, pubRSAnew; MessageFactory mf = MessageFactory.getInstance("OpenPGP"); in = new FileInputStream(new File(_testdir, "PGP8_testkey_DHDSS.asc")); msgs = mf.generateMessages(in); it = msgs.iterator(); kbm = (KeyBundleMessage)it.next(); prvDHDSS = kbm.getKeyBundle(); kbm = (KeyBundleMessage)it.next(); pubDHDSS = kbm.getKeyBundle(); in.close(); in = new FileInputStream(new File(_testdir, "PGP8_testkey_RSA_legacy.asc")); msgs = mf.generateMessages(in); it = msgs.iterator(); kbm = (KeyBundleMessage)it.next(); prvRSAleg = kbm.getKeyBundle(); kbm = (KeyBundleMessage)it.next(); pubRSAleg = kbm.getKeyBundle(); in.close(); in = new FileInputStream(new File(_testdir, "PGP8_testkey_RSA_new.asc")); msgs = mf.generateMessages(in); it = msgs.iterator(); kbm = (KeyBundleMessage)it.next(); prvRSAnew = kbm.getKeyBundle(); kbm = (KeyBundleMessage)it.next(); pubRSAnew = kbm.getKeyBundle(); in.close(); in = new FileInputStream(new File(_testdir, "PGP8_enc_DHDSS_sig_RSAleg.asc")); msgs = mf.generateMessages(in); it = msgs.iterator(); em = (EncryptedMessage)msgs.iterator().next(); sm = (SignedMessage)em.decrypt(prvDHDSS, "TestingPassphrase".toCharArray()); assertTrue("Correctly signed", sm.verify(pubRSAleg)); lm = (LiteralMessage)sm.getContents(); assertEquals("Decrypted data", "Hello", lm.getTextData()); in = new FileInputStream(new File(_testdir, "PGP8_enc_RSAnew_sig_DHDSS.asc")); msgs = mf.generateMessages(in); it = msgs.iterator(); em = (EncryptedMessage)msgs.iterator().next(); sm = (SignedMessage)em.decrypt(prvRSAnew, "TestingPassphrase".toCharArray()); assertTrue("Correctly signed", sm.verify(pubDHDSS)); lm = (LiteralMessage)sm.getContents(); assertEquals("Decrypted data", "Hello", lm.getTextData()); in = new FileInputStream(new File(_testdir, "PGP8_enc_RSAleg_sig_RSAnew.asc")); msgs = mf.generateMessages(in); it = msgs.iterator(); em = (EncryptedMessage)msgs.iterator().next(); sm = (SignedMessage)em.decrypt(prvRSAleg, "TestingPassphrase".toCharArray()); assertTrue("Correctly signed", sm.verify(pubRSAnew)); lm = (LiteralMessage)sm.getContents(); assertEquals("Decrypted data", "Hello", lm.getTextData()); } } 1.1 projects/openpgp/src/testdata/PGP8_enc_DHDSS_sig_RSAleg.asc Index: PGP8_enc_DHDSS_sig_RSAleg.asc =================================================================== -----BEGIN PGP MESSAGE----- Version: PGP 8.0.2 qANQR1DBwU4DSN5Riqsq3iYQCADGmfRhR79IOiWYi9ptYyhUBEIBDHYuDW5Lq6pT kvDRj9ByyyOmZdOFMm63Q+MHuR4QGdSNOQ2ndhhzmAptYEoz75XuBoqdYtop7Q+t 6dJYKVhFnYCZJx3vRF4LH86AseSKHhrMTzoQdcV92FNJKJMM3M1Cw0nG29xNoVGd D3fGiqWixB7NNEg+zVMCgUfhn4G8J7DuXgL4sGTawGB/WFBomBlmEQ/Fy6znepuE dtG380dm4SY8blXZ52izdAOM8RXjqZ+Dp17beqyZKzEHEX49+ooAYkTM0mkZhMKi twSBezn6j2lSMoC7nOGzLyAFcD3Dn1tS8BcpXGeJqf8zuX/hB/4k0NPHZb9K12PN 4U2MLvce/exDKdodbfLhg30uQP1qoKi64KPTYHAcWiDk6BINZYKnOjJqsB2pFtWZ qvRf4qJXH7KbjRUmVrD8Q/Ns4LegzSVPIXB2wjrmENONU/69sA/T+F9qej2kguu/ uI8f+ufGxA6theohB8+0hmyFNoCMYHLkRm9jiojHtKK9kz7bkMx9Sw9N35zi+vTY dmwBHhViLsAciphoQJEHsu70gs16+UvazZi94tMwdVkbjv0eJ1ByiFcsWI/ctZHI LJidj2LSubmFo4Fqn9oLrKeYlBIa6UZ4ay1Uu/Vhb5zWJIjlaOCQab3p3XCNyFf6 BD7xP0pl0sCmAeh75M+XRyM7QHQc5EPWth52cgR6otyZZr77kfNwORWdOJwuY9uW gwYoBC/xBO1tBpPp8jXuB1O2DUNJ2QaUpfGsZarTpG3jY1o21zMXRxNR4AtMRX7B oaxSwiQwEOQAQd5v6wkSWPL8pIvnqF4i135eNzOBrXf6dIs9L1jIOhAm9We+FpTY R0RN7Q1bUY5dtgZwmvsyzL3sMP2ozK4lAGbHv7AOLNrAhVjrwEh5qDdLTNp2Q7ne 7rjlwP2i3HGE0Ir7Sv9ElLlw9XH8/tXx6vn9uiGt5TQDwp/1uOhDSzoFdcwmPGrg 13RXQ2BnCIMUusVPIuww4rNdyf/nie/uNTha3wfuCItrV3XQ3+WUeKA0HrRO/OP2 uNUwTOkp9q5HCuyB1udYzDU5FsGQZUR7nIeM9VGNXtMu4MORnAkMKzx5Rj0BGzOG upsBjnxRQjtJNeBiOYNuFkeEEvQkVf2C9H+8AyR76Q== =4Ivp -----END PGP MESSAGE----- 1.1 projects/openpgp/src/testdata/PGP8_enc_RSAleg_sig_RSAnew.asc Index: PGP8_enc_RSAleg_sig_RSAnew.asc =================================================================== -----BEGIN PGP MESSAGE----- Version: PGP 8.0.2 hQEMA5lnADhWl3pvAQf7BbnrXa6zErdpRxCEkFanjA9F6kiCW9cJPFk0CCejZIDZ tlYIRRCKKRWa+Ip9HnXF0xPJA5bchxgOo9HsjHWap5pYtGpzzGfD0Fnzj9egaLMo LiB6J0fi0GM51A0QmjLYmqD5jVppvn12P1nBQqLpyzPYI+gUvmCQItwy+5eXTOMX WHeOxXDEv0q11sPme+vu3cAiXMJ7mnSdjy89gFU5ymJ0jdTFosroglxo2ifECtgf HFRQIMe1Q6ts8ZUvdhHxbzDsg/6sO23Pk301MYq6uaTRDEy925Z028axId0Nlp1B izBSa5Jd6fglOU/m0pfNq6ABDq7CBXY8qbJx2D9EjqUBNtgq0IVbdfLlQhM70JYZ Gg5FmDqaAA8cUFjq2b5nBlpxzHGKDqzM461Qh+kD3yXNbeaCoQO6omTKjMOhvzLy P5JzMVZ07p0adteIrI0+U9hf+kjzurvnLUrJpCWUi6q3IX6Wl8pI9ftwGKbDKIZl LufG8+e98nIrYpSOIlW7VcEwPEghqY2jvDRgXkkujoNh6nqDCVrjZEfrDeCaVB2U Xf/5L5wYRSkz5LLxIxJmQJEuFT0EY4b9hlDauEVJUw7ubKXfxGu6uHu5H1XYM0oK 1S47aqxdIWzdlf3m0Ni48xESRauKW17XMGi33PFbrErwzbRXwin8Ut6dMPtyUGtW IqbXNoQ6NtqexKT0+nVE6lyxuSf5oCq2nd9j0GpoTzHVUWlVSyGT/6g5pf9kgQHS x626+9ZrPaw= =7FPn -----END PGP MESSAGE----- 1.1 projects/openpgp/src/testdata/PGP8_enc_RSAnew_sig_DHDSS.asc Index: PGP8_enc_RSAnew_sig_DHDSS.asc =================================================================== -----BEGIN PGP MESSAGE----- Version: PGP 8.0.2 qANQR1DBwEwD0lCL6bhyeWMBCACCpPPlo0zoxkK/QOQrWWjvyqAracxfmkH8mv1z ZAEbGxNnF4QJ/jrmo6CMQHPrYIrrd4GYR7kRX/1N+Ls+ki6Pxa2yLrU5sBz3pI+7 u+jAk4nFqdbUAy/1+Ag8BWDAOY1tKG/MWQ51GNooeLy57quAwOd8Vvhc9YNZeQRp HXeSAc/IrWkE/TgGm1VOQIJx2/6WCi1OiFnBgTtqy30Ysk3FIfj/e+lqjcZbbTac hbsmsrsFb3bKcaJX+oh+iayVMnuLnDzjny0bsPMp5rITI32tTKKDnb8dlYshn+7f KrrxcxqAla6ThlRqJhPSy7c4db+jeJhO9pmW5Fie/jdTmaeW0ogBbHsFn+CZXRRi Umouo/KHcXvWawDZB1TtQmyJV+1qEv65as3AjMa/J/GhvQwML0oy9T48jXJK0dd6 ZWAPipRW/S3GTzLCt0lHzo7d+tW5UrcrK+/loYjbSLbEV8OtAqRbhx0OzMrTJcbe Ym90co0yM/Kamf09tEJinIS+56X3F2M8CIn20o1k =3BPK -----END PGP MESSAGE----- 1.1 projects/openpgp/src/testdata/PGP8_testkey_DHDSS.asc Index: PGP8_testkey_DHDSS.asc =================================================================== -----BEGIN PGP PRIVATE KEY BLOCK----- Version: PGP 8.0.2 lQHpBD9HD80RBAD0IGLylujQqmEIvYb0Hfuez3M9Nl/OnqjBwQE1QYHj9x+a6J1r lZ8vZEaDQBp8NiMQlvAyphhZZJ+Mkd8u0hK535SDx/z/FpxjkRgRWBRI7a3yK7+y Trol3/3KQ9B3zvHbEO5dZzKi5VxHREliXWN3omIreiFddLk+R1GqEazsjQCg/3ES PbxnRNGsW8cZmw3ymll3saMEANJUE6mISi5kNiDtjjGvDAYyAxdwrx1BCUGNFv7x md2mwkypTtJ5X3hyYc7o8siw0WcEkNUXlRaipE5/cU91eGUA10RBJAR9eYoFh3KX TVkA6Q3NJL/l2hVJMItsRwJYB/7r8FRz6IlY/mRaLzoeCd8FAEoZPOh0vEI82qck CrVgA/9hC45dd43SGDaHDw3LNVtoOGyG0wK9WDbTDlmrmLDUkJ7BwOw1xDwtyMvK hEjl+9lY+8ydy8bx9xH3dxPU9UGQfngf+NYWnReDjU9be/vPAjUkTGL6L6RkxAaI bSP0ewONAsrbsdepst7QJUt38EYPsjje8hXD+vqW3IuprTIuHv4JAwIaJIGhKIHu fWCmDd8ZXuE1XRbrl+UU/p6GNdkmHUcAFlNnkLodGMJzNyp+xlxCxedvtyYN3nl3 mnuzU60+quGHu8lKtBJQR1A4IHRlc3RrZXkgREhEU1OdAmsEP0cPzhAIAPZCV7cI fwgXcqK61qlC8wXo+VMROU+28W65Szgg2gGnVqMU6Y9AVfPQB8bLQ6mUrfdMZIZJ +AyDvWXpF9Sh01D49Vlf3HZSTz09jdvOmeFXklnN/biudE/F/Ha8g8VHMGHOfMlm /xX5u/2RXscBqtNbno2gpXI61Brwv0YAWCvl9Ij9WE5J280gtJ3kkQc2azNsOA1F HQ98iLMcfFstjvbzySPAQ/ClWxiNjrtVjLhdONM0/XwXV0OjHRhs3jMhLLUq/zzh sSlAGBGNfISnCnLWhsQDGcgHKXrKlQzZlp+r0ApQmwJG0wg9ZqRdQZ+cfL2JSyIZ Jrqrol7DVekyCzsAAgIIAOlwzyBU4YItRhLFNlT2bLjrnNl7a9r6lmydtIEV2jru hwcDVOIrRzs2hwMlkPImVe83trJ8em1s5QufTE92rO49skpRSFIfAx5eu/F1S758 s6FxYSbqQ29i+f57d/2bivyNnRIPA4XVPk/V7P1RKoFqIdIllgO0NnejqAh5thuj Tf4Z4ycPKI5Lqkw8vyFuIsZWZkCA/anMxxBiT20rYAa7SYTfD5pzrjFIwEQbFcw6 CR8KfK32pW3KN3hfC7J4QGqxEhYANlRmfv0ru24z9uFac2A1tqCH/Qpb5AXvrJdS ngJC3yc+7sFnpSy/In426215atbpoJu1G62gNFOhKhX+CQMC9rhQqFpwK4Bg+D7G LjADXx7i9pNedKk7a3McIO4mcJ3gTPcmfNyvftb2bWG+SBNaIkQsUPkjWLvLDrbK 1EoZJlVv3dSIQqnjS4A0D+KPPE94wO3kzUrUxVDD =4D0M -----END PGP PRIVATE KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK----- Version: PGP 8.0.2 mQGiBD9HD80RBAD0IGLylujQqmEIvYb0Hfuez3M9Nl/OnqjBwQE1QYHj9x+a6J1r lZ8vZEaDQBp8NiMQlvAyphhZZJ+Mkd8u0hK535SDx/z/FpxjkRgRWBRI7a3yK7+y Trol3/3KQ9B3zvHbEO5dZzKi5VxHREliXWN3omIreiFddLk+R1GqEazsjQCg/3ES PbxnRNGsW8cZmw3ymll3saMEANJUE6mISi5kNiDtjjGvDAYyAxdwrx1BCUGNFv7x md2mwkypTtJ5X3hyYc7o8siw0WcEkNUXlRaipE5/cU91eGUA10RBJAR9eYoFh3KX TVkA6Q3NJL/l2hVJMItsRwJYB/7r8FRz6IlY/mRaLzoeCd8FAEoZPOh0vEI82qck CrVgA/9hC45dd43SGDaHDw3LNVtoOGyG0wK9WDbTDlmrmLDUkJ7BwOw1xDwtyMvK hEjl+9lY+8ydy8bx9xH3dxPU9UGQfngf+NYWnReDjU9be/vPAjUkTGL6L6RkxAaI bSP0ewONAsrbsdepst7QJUt38EYPsjje8hXD+vqW3IuprTIuHrQSUEdQOCB0ZXN0 a2V5IERIRFNTiQBXBBARAgAXBQI/Rw/NBwsJCAcDAgoCGQEFGwMAAAAACgkQteqJ 2Ix1rqE7IACgpyPYyRXfu1wxEBKpxD2k7CweP4IAmgPZhZKR+oBvzRrSnij8953N f8o2uQINBD9HD84QCAD2Qle3CH8IF3KiutapQvMF6PlTETlPtvFuuUs4INoBp1aj FOmPQFXz0AfGy0OplK33TGSGSfgMg71l6RfUodNQ+PVZX9x2Uk89PY3bzpnhV5JZ zf24rnRPxfx2vIPFRzBhznzJZv8V+bv9kV7HAarTW56NoKVyOtQa8L9GAFgr5fSI /VhOSdvNILSd5JEHNmszbDgNRR0PfIizHHxbLY7288kjwEPwpVsYjY67VYy4XTjT NP18F1dDox0YbN4zISy1Kv884bEpQBgRjXyEpwpy1obEAxnIByl6ypUM2Zafq9AK UJsCRtMIPWakXUGfnHy9iUsiGSa6q6Jew1XpMgs7AAICCADpcM8gVOGCLUYSxTZU 9my465zZe2va+pZsnbSBFdo67ocHA1TiK0c7NocDJZDyJlXvN7ayfHptbOULn0xP dqzuPbJKUUhSHwMeXrvxdUu+fLOhcWEm6kNvYvn+e3f9m4r8jZ0SDwOF1T5P1ez9 USqBaiHSJZYDtDZ3o6gIebYbo03+GeMnDyiOS6pMPL8hbiLGVmZAgP2pzMcQYk9t K2AGu0mE3w+ac64xSMBEGxXMOgkfCnyt9qVtyjd4XwuyeEBqsRIWADZUZn79K7tu M/bhWnNgNbagh/0KW+QF76yXUp4CQt8nPu7BZ6UsvyJ+NutteWrW6aCbtRutoDRT oSoViQBLBBgRAgAMBQI/Rw/OBRsMAAAAAAoJELXqidiMda6hLDAAniHllqtQNIre eD0ZbkP5fMh27wyHAJYuNnkvX+XVYcIjRDjivKWUw+8s =1s+G -----END PGP PUBLIC KEY BLOCK----- 1.1 projects/openpgp/src/testdata/PGP8_testkey_RSA_legacy.asc Index: PGP8_testkey_RSA_legacy.asc =================================================================== -----BEGIN PGP PRIVATE KEY BLOCK----- Version: PGP 8.0.2 lQOqAz9HEFkAAAEIALpuay2esoCQ46BRd6AheNDOMuK2b5ImQ9nv9nbeaHgiK01b rZcK/xEsSHy5jwe47dKEtJ6iKQyEgve7G2rAzKh1K9928ZDvCrM8u4i2fHAy8z6V XnwWKpzQfzxmcZD7YRVos82NaHnRHZMtFECzGul3CXd2TQfELSI0ZNOnmm8fIKb+ EbUu1Wxxhfn50krpwJLNsj8qFxrw6G7n7nY+IBeCfA+/Y+oIdg+b5Szdd1FAzO/8 s0LwgXqurlRF8DVR5qbt7YMn/9P/qGxI/D2lVB1NOYdE/JEakk06rTHRhwzmtwBC iHUlaKLQ5zpUKgaDBItC7Ed+rv6UmWcAOFaXem8AEQEAAQl90NV66mXH3Z/gM2W+ OGxzB/7hjaGSiVkDhVajZXshwUA2lD+PaPIpivwTJvxc5+vo2Fp0nG59LhRr2k4D DOIhz7GtCi7Joiq1AjLeqsSpuhnVnvCViVi+GZopgbMwQd9927Yv7LcxZQhz1S0V eji9zljilU5RO6IaRYnVmmFf3IaoHc7mD50I0JNpJRd5XaUW/oRA6UKE0ty1I5w5 DqPzb70uLdAG3ES/dJsqtpnna8G/h2j/BOiPA225af4THKm+gNS8+NBpDTXC3hvh Ji9hfpmIC5quPAOqZ3C5+j266FeTtudll5JIPLaqtKALXYWeGSPBjujUaHva2jE8 jIIOv3U+W/g9HTCFV1zcuYSi62k1BAD+cUBXvI+Eht4dARoF0KD7ctIRkuXC45Mf lOOQ+9Y+WJL0dTvGROv4hTHhIxaw3BWYus6OEinx2LUIcI2v7/nNDVvXAl4KToTm rxSmFGGocCwjvvKYcWQKBzOj6XNTsAZrUraVP15htDtfZ7mDrH/63LUnwtiwpXIq VhG19xakrQQA2lt1BOMygCRuhowwoCzIwc1os41n/W5UMhw5hoUID9bYeraMdYGQ j7nwztGkDHmo3ECYOVXyLbGEdHycn7Cp6AtczDhcO26JigDBM5xIKj9soNXkFyrQ MSRl0xcaAU7W9umRkr9ADL9D+FRnyGcR5w+u4TnNcNoMc9k1+zIPuikD/9brQ6qq gHNcap0rpDPT04l4lAERU2TJMHwbd1OcBPwxstZeydj3epncScC/JruO3wK5oD5q cg5tp6Mt2vB5HKzuSHKxaaDmUp9Og03w2sXVU3UsGn6cNmixar2eYG+iCLkJFWKu B5C+xxVUl4zqUVRw6nNsM214jX87qj5X25HkQ/a0F1BHUDggdGVzdGtleSBSU0Eg bGVnYWN5 =MkIe -----END PGP PRIVATE KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK----- Version: PGP 8.0.2 mQEPAz9HEFkAAAEIALpuay2esoCQ46BRd6AheNDOMuK2b5ImQ9nv9nbeaHgiK01b rZcK/xEsSHy5jwe47dKEtJ6iKQyEgve7G2rAzKh1K9928ZDvCrM8u4i2fHAy8z6V XnwWKpzQfzxmcZD7YRVos82NaHnRHZMtFECzGul3CXd2TQfELSI0ZNOnmm8fIKb+ EbUu1Wxxhfn50krpwJLNsj8qFxrw6G7n7nY+IBeCfA+/Y+oIdg+b5Szdd1FAzO/8 s0LwgXqurlRF8DVR5qbt7YMn/9P/qGxI/D2lVB1NOYdE/JEakk06rTHRhwzmtwBC iHUlaKLQ5zpUKgaDBItC7Ed+rv6UmWcAOFaXem8AEQEAAbQXUEdQOCB0ZXN0a2V5 IFJTQSBsZWdhY3mJARUDBRA/RxBZmWcAOFaXem8BAd1+CACjh0Adeq/r1KI7NC8j Yv3+BrqIAd91nkp1gZ6Mq0cGyxilPIw0piyQJkfEdttFZhUZQ29i6kZN8wemqihn jfuaZW6HJr60jAflqA2uiewjPvj9OXZI3ws0qOSqR8zKbTv0r/NaTl9k2nh024Dt 7Q6Zk3S+6F8vTpbyBV0FwtDwhkinHY9DTIeJ8ZSojP+5Hzt/yl6PowzAT9TVpejy hLFWW7WVwb3RqCoysGcrcv3/cxHV/mxI48jim7FvX92YpJuVqUeQiQtZJAuuxXya 2Wb11e+179Xr+8GLhWBxVZCKvwHZSanA913D45b18DuVGyDPlxLeEkD1Vj5LtABM 7+VP =Fzqu -----END PGP PUBLIC KEY BLOCK----- 1.1 projects/openpgp/src/testdata/PGP8_testkey_RSA_new.asc Index: PGP8_testkey_RSA_new.asc =================================================================== -----BEGIN PGP PRIVATE KEY BLOCK----- Version: PGP 8.0.2 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 RZZ8mzVcbSi3ObLqRy4kv7CiJ+HEN/kgfdWdXA== =nZe/ -----END PGP PRIVATE KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK----- Version: PGP 8.0.2 mQENBD9HEBQBCAC+y88V4nYTFQzK4vlO8L+gesEHrc4Oujq/lZmKum8hSyyJT3Gw b6fw7qCEi2zz7yX6+7GffFT5xw4c9oYRi81ZfnvbG8a3o8kQfInBJz4Zp0L9iBei KOxjkIfAfEAVEYeScLYCCftsqyt5NMZyNCQ/hob8GDPAgxA1Bp5E8gErzu1nwdvM smVKf6Ur0xdyaHqBdoJMwePN7c5RWw9HnhhdvUcMNEFIPhRQZ5oDXg8C0jdkKnSp SijvAIThYfF02HNFfdDfXxrsGl06rU/1zCPQN4qCXhbssBPPGsln+OGi+389ZiVn ZWn8brHcmZVbfKOQs9aVUIDD1dNw85NbTfl3ABEBAAG0FFBHUDggdGVzdGtleSBS U0EgbmV3iQEtBBABAgAXBQI/RxAUBwsJCAcDAgoCGQEFGwMAAAAACgkQi5U3Ffp/ QhP31wf8C6KqO1SqUqx2432Y1jRgVHtbOevRwevrSbajnO0faWd3ixeL8wF384H6 oR73Tt/OXSbc26tGvQvEkfMPZ8qlFWo/8VHc+Wg8X+aZQfiodh68evBj+oFNuhpY Tbg4b0xk+DgIYmV+LtyBYJWSnuw+lVRXZ2srCAONLzDsf/SibmFLv7t2l/F5JkD5 p2ajS2TUWbZAzta6UYLYJE9kSB/9Bsn7m9BaAUrPzWJ58QYOutVodIQ5BJ9MFL3q 0ILRimsJtQaQOqpRMCA2rTVC28Wb4ISaqN5kql5gLWXJAYGidxuWaoaqpfeJU56y nviPNUPssn7NSrkf0ueOdXRWLkOpyrkBDQQ/RxAiAQgA1dvpVSMe9Sdj+oiKW5OM qpXJM9e4HytwgfPEySJ7Oq3udERCk+defjqz8c4+C/WpuRBS5qVQeOcJuQRjHg/h OMA26XQjuoOPKKIqXoX2kSVEoIXak+3Bd4YGK6fZFER1X7Y7SZkBOwJUaZ3CZBGt WzjgyOeCZTKEJz3bqjQTH78x0r6MD1mAdfD1pii3DgB3B9SrI1E8stWA5QT6eTu7 tfelUUYtPkppY3pZumwMfD7ODDHVJExCOjFbJ+QRZzMr/JaxHasaX2dH+W9vS8KA pa/FOcEf+bP1Ej2L0wWmovygFU2YA8GFRAEeKhiTk7VO99IxucDiAvs1kVyt7lEi ZwARAQABiQEiBBgBAgAMBQI/RxAiBRsMAAAAAAoJEIuVNxX6f0ITr4oIAJeAGRSF JfadUDDR0sB2cpTFzcKGFTmn/ZRnkBHHsPRRxm14JzPHFMOq+0GYyaQ03W3Jur0G 6ysb4K0Ei0FzBQ/dFjhW63U/bl2Rrzfavdo5pz0qlJT8jh5594HCdNHSeMySRUNV OeHdTFmdAYX5i+mkgY+H9nTj1+quo4ejFbzL2/SdPJF9rbuXOSyAqyk8Eih1yCDm GEc3evkaunfQUv4GyByU/UPUN6jiQehFHeyOtFYE7kr4s7cJKh9CCxv59D1WrJS1 cSkDzEoBtcOASwbkk3H4tnWJr68JPyjCrEv3j0SNZU7ZPwXBpDYoT4buXBEHmLxA jLEfcjvVR5GeWEU= =hc/p -----END PGP PUBLIC KEY BLOCK----- |