From: Bryan D. <bd...@bi...> - 2006-12-22 23:50:33
|
I writing a simple echo client/server to practice with Cryptix. I'm getting an end of stream reached before data exception I don't understand. Here's the exception stack trace cryptix.message.stream.MessageStreamException: End of stream reached before data. at cryptix.openpgp.provider.PGPDecodedMessageInputStream.engineInit(PGPDecodedMessageInputStream.java:70) at cryptix.message.stream.DecodedMessageInputStream.init(DecodedMessageInputStream.java:144) at com.bigfoot.bdunphy.recho.client.Conversation.<init>(Conversation.java:65) at com.bigfoot.bdunphy.recho.client.Main.connectMenuItemActionPerformed(Main.java:155) at com.bigfoot.bdunphy.recho.client.Main.access$000(Main.java:33) at com.bigfoot.bdunphy.recho.client.Main$1.actionPerformed(Main.java:77) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258) at javax.swing.AbstractButton.doClick(AbstractButton.java:302) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1000) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.menuDragMouseReleased(BasicMenuItemUI.java:1104) at javax.swing.JMenuItem.fireMenuDragMouseReleased(JMenuItem.java:578) at javax.swing.JMenuItem.processMenuDragMouseEvent(JMenuItem.java:475) at javax.swing.JMenuItem.processMouseEvent(JMenuItem.java:422) at javax.swing.MenuSelectionManager.processMouseEvent(MenuSelectionManager.java:283) at javax.swing.plaf.basic.BasicPopupMenuUI$MouseGrabber.eventDispatched(BasicPopupMenuUI.java:779) at java.awt.Toolkit$SelectiveAWTEventListener.eventDispatched(Toolkit.java:2206) at java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Toolkit.java:2100) at java.awt.Toolkit.notifyAWTEventListeners(Toolkit.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:3867) at java.awt.Container.dispatchEventImpl(Container.java:2024) at java.awt.Component.dispatchEvent(Component.java:3803) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822) at java.awt.Container.dispatchEventImpl(Container.java:2010) at java.awt.Window.dispatchEventImpl(Window.java:1778) at java.awt.Component.dispatchEvent(Component.java:3803) at java.awt.EventQueue.dispatchEvent(EventQueue.java:463) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149) at java.awt.EventDispatchThread.run(EventDispatchThread.java:110) and here's the code : <-- marks the line the exception is thrown on. protected Conversation(Socket socket, PGPKeyBundle pubKey, PGPKeyBundle secKey, char[] pass) { this.socket = socket; this.pubKey = pubKey; this.secKey = secKey; this.pass = pass; initComponents(); try { DecodedMessageInputStream dmis = DecodedMessageInputStream.getInstance("OpenPGP"); InputStream sin = this.socket.getInputStream(); LiteralMessageOutputStream lit = LiteralMessageOutputStream.getInstance("OpenPGP"); SignedMessageOutputStream sign = SignedMessageOutputStream.getInstance("OpenPGP"); EncryptedMessageOutputStream enc = EncryptedMessageOutputStream.getInstance("OpenPGP"); SecureRandom rand = new SecureRandom(); lit.init(sign, rand); sign.init(enc, rand); enc.init(this.socket.getOutputStream(), rand); sign.addSigner(this.secKey, this.pass); ExtendedKeyStore ring = (ExtendedKeyStore) ExtendedKeyStore.getInstance("OpenPGP/KeyRing"); ring.load(sin, null); remoteKey = (PGPKeyBundle) ring.getKeyBundle((String) ring.aliases().nextElement()); dmis.init(sin, this, this); <-- enc.addRecipient(remoteKey); in = new BufferedReader(new InputStreamReader(dmis)); out = new PrintWriter(new OutputStreamWriter(lit), true); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (UnrecoverableKeyException e) { e.printStackTrace(); } catch (KeyStoreException e) { e.printStackTrace(); } catch (CertificateException e) { e.printStackTrace(); } } I can post the corresponding server code as well if needed |