encryptasymmetrictest.java

来自「JGRoups源码」· Java 代码 · 共 701 行 · 第 1/2 页

JAVA
701
字号
		// assert that both now have same key		assertEquals(peer.getDesKey(),server.getDesKey());				// send another encrypted message to peer to test queue		Message msg2 = new Message();		msg2.setBuffer(cipher.doFinal("hello2".getBytes()));		msg2.putHeader(EncryptHeader.KEY, new EncryptHeader(				EncryptHeader.ENCRYPT, symVersion));				Event evt2 = new Event(Event.MSG,msg2);		peer.up(evt2);				// make sure we have the events now in the up layers		assertEquals(3,peerObserver.getUpMessages().size());				Event tempEvt = (Event)peerObserver.getUpMessages().get("message2");						assertEquals(new String(((Message)tempEvt.getArg()).getBuffer()),"hello");				tempEvt = (Event)peerObserver.getUpMessages().get("message3");				assertEquals(new String(((Message)tempEvt.getArg()).getBuffer()),"hello2");						}		public void testViewChangeNewKeyServerNewKey() throws Exception{		// create peer and server		ENCRYPT peer = new ENCRYPT();		try {			peer.init();		} catch (Exception e){			fail(e.getMessage());		}				ENCRYPT server = new ENCRYPT();		try {			server.init();		} catch (Exception e){			fail(e.getMessage());		}						ENCRYPT peer2 = new ENCRYPT();		try {			peer2.init();		} catch (Exception e){			fail(e.getMessage());		}				// set up server 		server.keyServer = true;		MockObserver serverObserver = new MockObserver();		server.setObserver(serverObserver);				//set the local address and view change to simulate a started instance		Address serverAddress = new MockAddress("server");		server.setLocal_addr(serverAddress);				//	set the server up as keyserver		Vector serverVector = new Vector();		serverVector.add(serverAddress);		View tempView = new View(new ViewId(serverAddress,1),serverVector);		Event serverEvent = new Event(Event.VIEW_CHANGE,tempView);		server.up(serverEvent);						// set up peer as if it has started but not recieved view change		Address peerAddress = new MockAddress("peer");		peer.setLocal_addr(peerAddress);		MockObserver peerObserver = new MockObserver();		peer.setObserver(peerObserver);		peer.keyServer = false;				// set up peer2 with server as key server		Address peer2Address = new MockAddress("peer2");		peer2.setLocal_addr(peer2Address);		MockObserver peer2Observer = new MockObserver();		peer2.setObserver(peer2Observer);		peer2.keyServer = false;		peer2.setKeyServerAddr(serverAddress);				// send an encrypted message from the server		Message msg = new Message();		msg.setBuffer("hello".getBytes());						Event evt = new Event(Event.MSG,msg);		server.down(evt);				// message0 is in response to view change		Event encEvt = (Event)serverObserver.getDownMessages().get("message1");		// sent to peer encrypted - should be queued in encyption layer as we do not have a keyserver set		peer.up(encEvt);				//assert that message is queued as we have no key from server		assertTrue(peerObserver.getUpMessages().isEmpty());				// send a view change to peer where peer2 is  controller		Vector peerVector = new Vector();		peerVector.add(peer2Address);		View tempPeerView = new View(new ViewId(peer2Address,1),peerVector);		Event event = new Event(Event.VIEW_CHANGE,tempPeerView);				// send to peer - should set peer2 as keyserver		peer.up(event);				// assert that peer\ keyserver address is now set		assertTrue(peer2Address == peer.getKeyServerAddr());				// get the resulting message from the peer - should be a key request to peer2				Event sent = (Event)peerObserver.getDownMessages().get("message0");				// ensure type and that request contains peers pub key		assertTrue(((EncryptHeader)((Message)sent.getArg()).getHeader(ENCRYPT.EncryptHeader.KEY)).getType() == ENCRYPT.EncryptHeader.KEY_REQUEST);		assertEquals(new String(((Message)sent.getArg()).getBuffer()),new String(peer.getKpair().getPublic().getEncoded()));				//assume that server is no longer available and peer2 is new server		// but did not get the key from server before assuming role		// send this event to peer2//		 send a view change to trigger the become key server		// we use the fact that our address is now the controller one		// send a view change where we are not the controller		Vector peer2Vector = new Vector();		peer2Vector.add(peer2Address);		View tempPeer2View = new View(new ViewId(peer2Address,1),peer2Vector);		Event event2 = new Event(Event.VIEW_CHANGE,tempPeer2View);		// this should have changed us to the key server		peer2.up(event2);				peer2.up(sent);				Event reply = (Event)peer2Observer.getDownMessages().get("message1");						//assert that reply is the session key encrypted with peer's public key		assertTrue(((EncryptHeader)((Message)reply.getArg()).getHeader(ENCRYPT.EncryptHeader.KEY)).getType() == ENCRYPT.EncryptHeader.SECRETKEY);			assertNotSame(peer.getDesKey(),peer2.getDesKey());		assertNotSame(server.getDesKey(),peer2.getDesKey());				// now send back to peer		peer.up(reply);				// assert that both now have same key		assertEquals(peer.getDesKey(),peer2.getDesKey());		assertNotSame(server.getDesKey(),peer.getDesKey());						// send another encrypted message to peer to test queue		Message msg2 = new Message();		msg2.setBuffer("hello2".getBytes());				Event evt2 = new Event(Event.MSG,msg2);		peer2.down(evt2);				Event Evt2 = (Event)peer2Observer.getDownMessages().get("message2");		peer.up(Evt2);		// make sure we have the events now in the up layers		assertEquals(2,peerObserver.getUpMessages().size());				Event tempEvt = (Event)peerObserver.getUpMessages().get("message2");						assertEquals(new String(((Message)tempEvt.getArg()).getBuffer()),"hello2");							}		class MockObserver implements ProtocolObserver {		private Map upMessages = new HashMap();		private Map downMessages = new HashMap();		private int counter =0;		/* (non-Javadoc)		 * @see org.jgroups.UpHandler#up(org.jgroups.Event)		 */				private void storeUp(Event evt){			upMessages.put("message"+counter++,evt);		}				private void storeDown(Event evt){			downMessages.put("message"+counter++,evt);		}		public void up(Event evt)		{			storeUp(evt);			System.out.println("Up:"+evt.toString());					}		/* (non-Javadoc)		 * @see org.jgroups.stack.ProtocolObserver#setProtocol(org.jgroups.stack.Protocol)		 */		public void setProtocol(Protocol prot)		{		}		/* (non-Javadoc)		 * @see org.jgroups.stack.ProtocolObserver#up(org.jgroups.Event, int)		 */		public boolean up(Event evt, int num_evts)		{			System.out.println("Up:"+evt.toString());						return false;		}		/* (non-Javadoc)		 * @see org.jgroups.stack.ProtocolObserver#passUp(org.jgroups.Event)		 */		public boolean passUp(Event evt)		{			storeUp(evt);			System.out.println("PassUp:"+evt.toString());						return false;		}		/* (non-Javadoc)		 * @see org.jgroups.stack.ProtocolObserver#down(org.jgroups.Event, int)		 */		public boolean down(Event evt, int num_evts)		{			System.out.println("down:"+evt.toString());						return false;		}		/* (non-Javadoc)		 * @see org.jgroups.stack.ProtocolObserver#passDown(org.jgroups.Event)		 */		public boolean passDown(Event evt)		{			storeDown(evt);			System.out.println("passdown:"+evt.toString());						return false;		}				/**		 * @return Returns the upMessages.		 */		protected Map getUpMessages()		{			return upMessages;		}		/**		 * @param upMessages The upMessages to set.		 */		protected void setUpMessages(Map upMessages)		{			this.upMessages = upMessages;		}		/**		 * @return Returns the downMessages.		 */		protected Map getDownMessages()		{			return downMessages;		}		/**		 * @param downMessages The downMessages to set.		 */		protected void setDownMessages(Map downMessages)		{			this.downMessages = downMessages;		}	}		class MockAddress implements Address{		/* (non-Javadoc)		 * @see org.jgroups.Address#isMulticastAddress()		 */		String name;		public MockAddress(String name){			this.name = name;		}        public MockAddress() {        }        public boolean isMulticastAddress()		{			return false;		}        public int size() {            return 0;        }        /* (non-Javadoc)		 * @see java.io.Externalizable#readExternal(java.io.ObjectInput)		 */		public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException		{		}		/* (non-Javadoc)		 * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)		 */		public void writeExternal(ObjectOutput out) throws IOException		{		}		/* (non-Javadoc)		 * @see java.lang.Comparable#compareTo(java.lang.Object)		 */		public int compareTo(Object o)		{			return -1;		}				public boolean equals(Object obj){			MockAddress address = (MockAddress)obj;			if (address.name.equals(this.name)){				return true;			}			return false;		}        public void writeTo(DataOutputStream out) throws IOException {        }        public void readFrom(DataInputStream in) throws IOException, IllegalAccessException, InstantiationException {        }    }	}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?