mirror of
https://gitee.com/willfree/min-dev-java.git
synced 2026-06-18 08:20:25 +08:00
add example: KeyManagerExample、test docs;
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,95 @@
|
||||
package examples;
|
||||
|
||||
import common.LoggerHelper;
|
||||
import minsecurity.certificate.cert.Certificate;
|
||||
import minsecurity.identity.Identity;
|
||||
import security.KeyChain;
|
||||
|
||||
/*
|
||||
* @Author: Wang Feng
|
||||
* @Description: libapi目录下存放一些示例代码。
|
||||
* 本类是帮助应用管理用户身份及签名验签的示例代码(单例模式)。
|
||||
* @Version: 1.0.0
|
||||
* @Date: 15:39 2021/6/15
|
||||
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
||||
*/
|
||||
public enum KeyManagerExample {
|
||||
INSTANCE;
|
||||
private KeyChain keyChain = null;
|
||||
|
||||
KeyManagerExample() {
|
||||
String appKeyPath="/"; /// 默认身份存放位置。这里是
|
||||
try {
|
||||
this.keyChain = getOrBuildKeyChain("/default",appKeyPath);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public KeyManagerExample initKeyChain(String identityName, String appKeyPath) {
|
||||
try {
|
||||
this.keyChain = getOrBuildKeyChain(identityName,appKeyPath);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
private KeyChain getOrBuildKeyChain(String identityName,String minKeyPath) throws Exception {
|
||||
KeyChain keyChain = null;
|
||||
|
||||
try {
|
||||
// 如果本来就有该身份,就将该身份设置为默认身份
|
||||
keyChain = new KeyChain(minKeyPath);
|
||||
Identity identity=keyChain.getIdentityByName(identityName);
|
||||
keyChain.setDefaultIdentity(identity);
|
||||
}catch (Exception e){
|
||||
// 否则,创造该身份,并设置为默认身份,且持久化该身份到本地
|
||||
System.out.println(e.getMessage());
|
||||
Identity identity=keyChain.getIdentifyManager().createIdentityByName(identityName,"",true);
|
||||
keyChain.setDefaultIdentity(identity);
|
||||
}
|
||||
|
||||
return keyChain;
|
||||
}
|
||||
|
||||
public Certificate getCertification(String identityName,String appKeyPath){
|
||||
return KeyManagerExample.INSTANCE.initKeyChain(identityName,appKeyPath)
|
||||
.getKeyChain()
|
||||
.getCurrentIdentity()
|
||||
.getCert();
|
||||
}
|
||||
|
||||
// 判断本地是否有某个标识名对应的证书
|
||||
public boolean isInKeyChain(String identityName,String appKeyPath) {
|
||||
KeyChain keyChain = null;
|
||||
try {
|
||||
keyChain = new KeyChain(appKeyPath);
|
||||
Identity identity = keyChain.getIdentityByName(identityName);
|
||||
keyChain.setDefaultIdentity(identity);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
LoggerHelper.warning(e.getMessage());
|
||||
LoggerHelper.warning("本地无该标识名称对应的证书:"+identityName);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean deleteIdentity(String identityName){
|
||||
try {
|
||||
return keyChain.getIdentifyManager().deleteIdentityByName(identityName,true);
|
||||
} catch (Exception e) {
|
||||
LoggerHelper.warning(e.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public KeyChain getKeyChain() {
|
||||
return keyChain;
|
||||
}
|
||||
|
||||
public void setKeyChain(KeyChain keyChain) {
|
||||
this.keyChain = keyChain;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package security;
|
||||
|
||||
import component.Identifier;
|
||||
|
||||
/*
|
||||
* @Author: hongyu guo
|
||||
* @Description:
|
||||
@@ -11,5 +13,4 @@ public class IdentifyManagerException extends Exception{
|
||||
public IdentifyManagerException(String msg){
|
||||
super(msg);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package examples;
|
||||
|
||||
/*
|
||||
* @Author: Wang Feng
|
||||
* @Description:
|
||||
* @Version: 1.0.0
|
||||
* @Date: 16:24 2021/6/15
|
||||
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
||||
*/
|
||||
public class TestKeyManagerExample {
|
||||
// KeyManager manager=KeyManager.INSTANCE;
|
||||
|
||||
}
|
||||
@@ -121,19 +121,19 @@ public class FaceTransmissionSpeedTest {
|
||||
|
||||
@Test
|
||||
public void testSendCPacketByUdp_Sign() throws Exception {
|
||||
int size=8000; //发包负载
|
||||
int size=1300; //发包负载
|
||||
long npackets=1000000;
|
||||
// 初始化face
|
||||
LogicFace face = new LogicFace();
|
||||
face.initWithUdp("127.0.0.1", 13899);
|
||||
// 初始化keychain
|
||||
KeyChain keyChain=new KeyChain("./");
|
||||
KeyChain keyChain=new KeyChain();
|
||||
// Identity id = createRandomIdentity();
|
||||
// keyChain.getIdentifyManager().setDefaultIdentity(id, true);
|
||||
// 记录时间
|
||||
long startTime=System.currentTimeMillis();
|
||||
// 循环构造包、签名包、发包
|
||||
for (int i = 0; i < 10; i++) {
|
||||
for (int i = 0; i < npackets; i++) {
|
||||
// 构造CPacket
|
||||
CPacket cPacket = new CPacket();
|
||||
byte[] value = new byte[size];
|
||||
@@ -148,14 +148,14 @@ public class FaceTransmissionSpeedTest {
|
||||
face.sendCPacket(cPacket);
|
||||
}
|
||||
long endTime=System.currentTimeMillis();
|
||||
// 计算发包速率 cpacket头部长度约为80
|
||||
long bitNums= npackets *(size+80)*8; // 总传输比特数
|
||||
// 计算发包速率 cpacket头部长度约为190
|
||||
long bitNums= npackets *(size+190)*8; // 总传输比特数
|
||||
long times=(endTime-startTime)/1000; // 总耗时(/s)
|
||||
double speed1=((double) bitNums)/(double)(times*1024*1024);// 网速
|
||||
int speed2= (int) (npackets/times);
|
||||
System.out.println("**************************");
|
||||
System.out.println("发包类型:Signed CPacket");
|
||||
System.out.println("发包负载:"+size+" byte, 总长度:"+(size+80)+" byte");
|
||||
System.out.println("发包负载:"+size+" byte, 总长度:"+(size+190)+" byte");
|
||||
System.out.println("发包个数:"+npackets);
|
||||
Date date=new Date();
|
||||
date.setTime(startTime);
|
||||
@@ -211,4 +211,54 @@ public class FaceTransmissionSpeedTest {
|
||||
System.out.println("发包速率2:"+speed2+"个CPacket/s");
|
||||
System.out.println("*************TCP*************");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendCPacketByTCP_Sign() throws Exception {
|
||||
int size=8000; //发包负载
|
||||
long npackets=1000000;
|
||||
// 初始化face
|
||||
LogicFace face = new LogicFace();
|
||||
face.initWithTcp("127.0.0.1", 13899);
|
||||
// 初始化keychain
|
||||
KeyChain keyChain=new KeyChain();
|
||||
// Identity id = createRandomIdentity();
|
||||
// keyChain.getIdentifyManager().setDefaultIdentity(id, true);
|
||||
// 记录时间
|
||||
long startTime=System.currentTimeMillis();
|
||||
// 循环构造包、签名包、发包
|
||||
for (int i = 0; i < npackets; i++) {
|
||||
// 构造CPacket
|
||||
CPacket cPacket = new CPacket();
|
||||
byte[] value = new byte[size];
|
||||
cPacket.payload.setValue(value);
|
||||
Identifier name = new Identifier("/wefree");
|
||||
Identifier nameTo = new Identifier("/wf");
|
||||
cPacket.setSrcIdentifier(name);
|
||||
cPacket.setDstIdentifier(nameTo);
|
||||
// 对该包进行签名签名
|
||||
keyChain.signCPacket(cPacket);
|
||||
// 发包
|
||||
face.sendCPacket(cPacket);
|
||||
System.out.println(i);
|
||||
}
|
||||
long endTime=System.currentTimeMillis();
|
||||
// 计算发包速率 cpacket头部长度约为190
|
||||
long bitNums= npackets *(size+190)*8; // 总传输比特数
|
||||
long times=(endTime-startTime)/1000; // 总耗时(/s)
|
||||
double speed1=((double) bitNums)/(double)(times*1024*1024);// 网速
|
||||
int speed2= (int) (npackets/times);
|
||||
System.out.println("**************************");
|
||||
System.out.println("发包类型:Signed CPacket");
|
||||
System.out.println("发包负载:"+size+" byte, 总长度:"+(size+190)+" byte");
|
||||
System.out.println("发包个数:"+npackets);
|
||||
Date date=new Date();
|
||||
date.setTime(startTime);
|
||||
System.out.println("发包开始时间:"+date);
|
||||
date.setTime(endTime);
|
||||
System.out.println("发包结束时间:"+date);
|
||||
System.out.println("发包总耗时:"+times+" s");
|
||||
System.out.println("发包速率1:"+speed1+"Mbps");
|
||||
System.out.println("发包速率2:"+speed2+"个CPacket/s");
|
||||
System.out.println("**************************");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user