encryptasymmetrictest.java
来自「JGRoups源码」· Java 代码 · 共 701 行 · 第 1/2 页
JAVA
701 行
/* * Created on 04-Jul-2004 * * To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */package org.jgroups.protocols;import junit.framework.TestCase;import org.jgroups.*;import org.jgroups.protocols.ENCRYPT.EncryptHeader;import org.jgroups.stack.Protocol;import org.jgroups.stack.ProtocolObserver;import javax.crypto.Cipher;import java.io.*;import java.security.MessageDigest;import java.security.Security;import java.util.HashMap;import java.util.Map;import java.util.Properties;import java.util.Vector;/** * @author xenephon * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */public class ENCRYPTAsymmetricTest extends TestCase { { Security.addProvider( new org.bouncycastle.jce.provider.BouncyCastleProvider()); } public void testInitNoProperties() { ENCRYPT encrypt = new ENCRYPT(); try { encrypt.init(); } catch (Exception e){ fail(e.getMessage()); } // test the default asymetric key assertEquals("RSA",encrypt.getAsymAlgorithm()); assertEquals(512,encrypt.getAsymInit()); assertEquals("RSA",encrypt.getKpair().getPublic().getAlgorithm()); assertEquals("X.509",encrypt.getKpair().getPublic().getFormat()); assertNotNull(encrypt.getKpair().getPublic().getEncoded()); // test the default symetric key assertEquals("Blowfish",encrypt.getSymAlgorithm()); assertEquals(56,encrypt.getSymInit()); assertEquals("Blowfish",encrypt.getDesKey().getAlgorithm()); assertEquals("RAW",encrypt.getDesKey().getFormat()); assertNotNull(encrypt.getDesKey().getEncoded()); //test the resulting ciphers System.out.println("Provider:"+encrypt.getAsymCipher().getProvider()); assertNotNull(encrypt.getAsymCipher()); assertNotNull(encrypt.getSymDecodingCipher()); assertNotNull(encrypt.getSymEncodingCipher()); } public void testInitBCAsymProperties() { Properties props = new Properties(); props.put("asym_provider","BC"); props.put("asym_algorithm","RSA"); //javax. ENCRYPT encrypt = new ENCRYPT(); encrypt.setProperties(props); try { encrypt.init(); } catch (Exception e){ fail(e.getMessage()); } // test the default asymetric key assertEquals("RSA",encrypt.getAsymAlgorithm()); assertEquals(512,encrypt.getAsymInit()); assertEquals("RSA",encrypt.getKpair().getPublic().getAlgorithm()); //Strangely this returns differently from the default provider for RSA which is also BC! assertEquals("X.509",encrypt.getKpair().getPublic().getFormat()); assertNotNull(encrypt.getKpair().getPublic().getEncoded()); //test the resulting ciphers assertNotNull(encrypt.getAsymCipher()); } public void XtestInitRSABlockAsymProperties() { Properties props = new Properties(); props.put("asym_algorithm","RSA/ECB/OAEPPadding"); //javax. ENCRYPT encrypt = new ENCRYPT(); encrypt.setProperties(props); try { encrypt.init(); } catch (Exception e){ fail(e.getMessage()); } // test the default asymetric key assertEquals("RSA/ECB/OAEPPadding",encrypt.getAsymAlgorithm()); assertEquals(512,encrypt.getAsymInit()); assertEquals("RSA",encrypt.getKpair().getPublic().getAlgorithm()); //Strangely this returns differently from the default provider for RSA which is also BC! assertEquals("X509",encrypt.getKpair().getPublic().getFormat()); assertNotNull(encrypt.getKpair().getPublic().getEncoded()); //test the resulting ciphers assertNotNull(encrypt.getAsymCipher()); } public void testInitIDEAProperties() { Properties props = new Properties(); props.put("sym_algorithm","IDEA"); props.put("sym_init","128"); ENCRYPT encrypt = new ENCRYPT(); encrypt.setProperties(props); try { encrypt.init(); } catch (Exception e){ fail(e.getMessage()); } // test the default symetric key assertEquals("IDEA",encrypt.getSymAlgorithm()); assertEquals(128,encrypt.getSymInit()); assertEquals("IDEA",encrypt.getDesKey().getAlgorithm()); assertEquals("RAW",encrypt.getDesKey().getFormat()); assertNotNull(encrypt.getDesKey().getEncoded()); //test the resulting ciphers assertNotNull(encrypt.getSymDecodingCipher()); assertNotNull(encrypt.getSymEncodingCipher()); } public void testInitAESProperties() { Properties props = new Properties(); props.put("sym_algorithm","AES"); props.put("sym_init","128"); ENCRYPT encrypt = new ENCRYPT(); encrypt.setProperties(props); try { encrypt.init(); } catch (Exception e){ fail(e.getMessage()); } // test the default symetric key assertEquals("AES",encrypt.getSymAlgorithm()); assertEquals(128,encrypt.getSymInit()); assertEquals("AES",encrypt.getDesKey().getAlgorithm()); assertEquals("RAW",encrypt.getDesKey().getFormat()); assertNotNull(encrypt.getDesKey().getEncoded()); //test the resulting ciphers assertNotNull(encrypt.getSymDecodingCipher()); assertNotNull(encrypt.getSymEncodingCipher()); } public void testViewChangeBecomeKeyserver() throws Exception{ // set up the peer ENCRYPT encrypt = new ENCRYPT(); try { encrypt.init(); } catch (Exception e){ fail(e.getMessage()); } // set in the observer MockAddress tempAddress = new MockAddress("encrypt"); encrypt.setLocal_addr(tempAddress); MockObserver observer = new MockObserver(); encrypt.setObserver(observer); // produce encrypted message Cipher cipher = encrypt.getSymEncodingCipher(); MessageDigest digest = MessageDigest.getInstance("MD5"); digest.reset(); digest.update(encrypt.getDesKey().getEncoded()); String symVersion = new String(digest.digest(), "UTF-8"); encrypt.keyServer = false; Message msg = new Message(); msg.setBuffer(cipher.doFinal("hello".getBytes())); msg.putHeader(EncryptHeader.KEY, new EncryptHeader( EncryptHeader.ENCRYPT, symVersion)); Event evt = new Event(Event.MSG,msg); //pass in event to encrypt layer encrypt.up(evt); // assert that message is queued as we have no key assertTrue(observer.getUpMessages().isEmpty()); // send a view change to trigger the become key server // we use the fact that our address is now the controller one Vector tempVector = new Vector(); tempVector.add(tempAddress); View tempView = new View(new ViewId(tempAddress,1),tempVector); Event event = new Event(Event.VIEW_CHANGE,tempView); // this should have changed us to the key server encrypt.up(event); // send another encrypted message Message msg2 = new Message(); msg2.setBuffer(cipher.doFinal("hello2".getBytes())); msg2.putHeader(EncryptHeader.KEY, new EncryptHeader( EncryptHeader.ENCRYPT, symVersion)); // we should have three messages now in our observer // that are decrypted Event evt2 = new Event(Event.MSG,msg2); encrypt.up(evt2); assertEquals(3,observer.getUpMessages().size()); Event sent = (Event)observer.getUpMessages().get("message1"); assertEquals(new String(((Message)sent.getArg()).getBuffer()),"hello"); sent = (Event)observer.getUpMessages().get("message2"); assertEquals(new String(((Message)sent.getArg()).getBuffer()),"hello2"); } public void testViewChangeNewKeyServer() 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()); } // set up server server.keyServer = true; MockObserver serverObserver = new MockObserver(); server.setObserver(serverObserver); 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 Address peerAddress =new MockAddress("peer"); peer.setLocal_addr(peerAddress); MockObserver peerObserver = new MockObserver(); peer.setObserver(peerObserver); peer.keyServer = false; MessageDigest digest = MessageDigest.getInstance("MD5"); digest.reset(); digest.update(server.getDesKey().getEncoded()); String symVersion = new String(digest.digest(), "UTF-8"); // encrypt and send an initial message to peer Cipher cipher = server.getSymEncodingCipher(); Message msg = new Message(); msg.setBuffer(cipher.doFinal("hello".getBytes())); msg.putHeader(EncryptHeader.KEY, new EncryptHeader( EncryptHeader.ENCRYPT, symVersion)); Event evt = new Event(Event.MSG,msg); peer.up(evt); //assert that message is queued as we have no key from server assertTrue(peerObserver.getUpMessages().isEmpty()); // send a view change where we are not the controller // send to peer - which should have peer2 as its key server peer.up(serverEvent); // assert that peer\ keyserver address is now set assertTrue(serverAddress == peer.getKeyServerAddr()); // get the resulting message from the peer - should be a key request Event sent = (Event)peerObserver.getDownMessages().get("message0"); 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())); // send this event to server server.up(sent); Event reply = (Event)serverObserver.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(),server.getDesKey()); // now send back to peer peer.up(reply);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?