add example: KeyManagerExample、test docs;

This commit is contained in:
free will
2021-06-15 17:40:13 +08:00
parent d93a7af653
commit a26f908470
5 changed files with 166 additions and 7 deletions
@@ -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("**************************");
}
}