From 59b38430d3d517bbf10633579e8ee63255977755 Mon Sep 17 00:00:00 2001
From: ChessNineeee <709030194@qq.com>
Date: Thu, 15 Apr 2021 23:04:41 +0800
Subject: [PATCH] =?UTF-8?q?add:minsecurity=20security=E5=9F=BA=E5=87=86?=
=?UTF-8?q?=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 12 ++
.../identity/persist/sqlite/Sqlite.java | 3 +-
.../identity/IdentityBenchmark.java | 107 +++++++++++
.../identity/PersistBenchmark.java | 79 ++++++++
.../minsecurity/identity/TestPersist.java | 2 +-
.../identity/sqlite/SqliteBenchmark.java | 34 ++++
.../security/IdentifyManagerBenchmark.java | 111 +++++++++++
src/test/java/security/KeychainBenchmark.java | 178 ++++++++++++++++++
8 files changed, 523 insertions(+), 3 deletions(-)
create mode 100644 src/test/java/minsecurity/identity/IdentityBenchmark.java
create mode 100644 src/test/java/minsecurity/identity/PersistBenchmark.java
create mode 100644 src/test/java/minsecurity/identity/sqlite/SqliteBenchmark.java
create mode 100644 src/test/java/security/IdentifyManagerBenchmark.java
create mode 100644 src/test/java/security/KeychainBenchmark.java
diff --git a/pom.xml b/pom.xml
index 0f59b56..c8b5ed9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -106,6 +106,18 @@
sqlite-jdbc
3.35.4
+
+
+ org.openjdk.jmh
+ jmh-core
+ 1.23
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ 1.23
+ provided
+
diff --git a/src/main/java/minsecurity/identity/persist/sqlite/Sqlite.java b/src/main/java/minsecurity/identity/persist/sqlite/Sqlite.java
index bc949d0..e87dee2 100644
--- a/src/main/java/minsecurity/identity/persist/sqlite/Sqlite.java
+++ b/src/main/java/minsecurity/identity/persist/sqlite/Sqlite.java
@@ -83,8 +83,7 @@ public class Sqlite {
// 兼容sqlcipher
c = DriverManager.getConnection("jdbc:sqlite:" + real_db_file, SQLiteMCSqlCipherConfig.getV4Defaults().withKey(passwd2HexKey()).toProperties());
stmt = c.createStatement();
- int res = stmt.executeUpdate(table_create);
- System.out.println(res);
+ stmt.executeUpdate(table_create);
stmt.close();
c.close();
}catch (Exception ex){
diff --git a/src/test/java/minsecurity/identity/IdentityBenchmark.java b/src/test/java/minsecurity/identity/IdentityBenchmark.java
new file mode 100644
index 0000000..099cc89
--- /dev/null
+++ b/src/test/java/minsecurity/identity/IdentityBenchmark.java
@@ -0,0 +1,107 @@
+package minsecurity.identity;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import minsecurity.Common;
+import minsecurity.certificate.cert.CertException;
+import minsecurity.certificate.cert.CertUtils;
+import minsecurity.certificate.cert.Certificate;
+import minsecurity.crypto.AsymKeyException;
+import minsecurity.crypto.sm2.SM2Base;
+import minsecurity.crypto.sm2.SM2PrivateKey;
+import minsecurity.crypto.sm2.SM2PublicKey;
+import minsecurity.identity.sqlite.SqliteBenchmark;
+import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
+import org.bouncycastle.crypto.CryptoException;
+import org.bouncycastle.crypto.InvalidCipherTextException;
+import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
+import org.bouncycastle.crypto.params.ECPublicKeyParameters;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.util.concurrent.TimeUnit;
+
+import static org.junit.Assert.assertArrayEquals;
+
+@BenchmarkMode(Mode.AverageTime)
+@State(Scope.Thread)
+@Fork(1)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@Warmup(iterations = 3)
+@Measurement(iterations = 5)
+public class IdentityBenchmark {
+ private Identity createIdentity() throws Exception {
+ AsymmetricCipherKeyPair keyPair = SM2Base.generateKeyPairParameter();
+ ECPrivateKeyParameters priKey = (ECPrivateKeyParameters) keyPair.getPrivate();
+ ECPublicKeyParameters pubKey = (ECPublicKeyParameters) keyPair.getPublic();
+ byte[] d = priKey.getD().toByteArray();
+ // d = Arrays.copyOf(d,32);
+ byte[] x = pubKey.getQ().getAffineXCoord().getEncoded();
+ byte[] y = pubKey.getQ().getAffineYCoord().getEncoded();
+ // logger.debug("d.len = {}, x.len = {}, y.len = {}",d.length, x.length, y.length);
+
+ // BigInteger bigInteger = priKey.getD();
+ SM2PrivateKey sm2PrivateKey = new SM2PrivateKey(d);
+ SM2PublicKey sm2PublicKey = new SM2PublicKey(x,y);
+ KeyParam keyParam = new KeyParam(Common.SM2, Common.SM3withSM2);
+ Identity identity = new Identity("root",keyParam,sm2PrivateKey,sm2PublicKey, "123456", null, false);
+ Certificate certificate = new Certificate(1, 1, sm2PublicKey, null,
+ Common.SM3withSM2, Common.SM2, "root", "root",
+ System.currentTimeMillis() - 1000, System.currentTimeMillis() + 5000,
+ Common.CertSign, true, System.currentTimeMillis());
+ CertUtils.signCert(certificate, sm2PrivateKey);
+ identity.setCert(certificate);
+ return identity;
+ }
+ @Benchmark
+ public void testSignAndVerify() throws Exception {
+ Identity id = createIdentity();
+ String text = "2020-03-09";
+ // test sign and verify
+ byte[] signature = id.sign(text.getBytes());
+ boolean flag = id.verify(text.getBytes(), signature);
+ }
+
+ @Benchmark
+ public void testEncAndDec() throws Exception {
+ Identity id = createIdentity();
+ String text = "2020-03-09";
+ // test enc and dec
+ byte[] cipher = id.encrypt(text.getBytes());
+ byte[] bytesOfDec = id.decrypt(cipher);
+ // assertArrayEquals(bytesOfDec, text.getBytes());
+ }
+
+ @Benchmark
+ public void testDumpAndLoad() throws Exception {
+ Identity id = createIdentity();
+ // test dump and load
+ byte[] bytesOfDump = id.dump(id.getPasswd());
+ Identity idFromBytes = Identity.load(bytesOfDump, id.getPasswd());
+ }
+
+ @Benchmark
+ public void testDumpAndLoad2() throws Exception {
+ Identity id = createIdentity();
+ // test dump and load without passwd
+ byte[] bytesOfDump = id.dump(null);
+ Identity idFromBytes = Identity.load(bytesOfDump, null);
+ }
+
+ public static void main(String[] args) throws RunnerException {
+ Options opt = new OptionsBuilder()
+ .include(IdentityBenchmark.class.getSimpleName())
+ .build();
+ new Runner(opt).run();
+ }
+}
+
diff --git a/src/test/java/minsecurity/identity/PersistBenchmark.java b/src/test/java/minsecurity/identity/PersistBenchmark.java
new file mode 100644
index 0000000..b7b66cf
--- /dev/null
+++ b/src/test/java/minsecurity/identity/PersistBenchmark.java
@@ -0,0 +1,79 @@
+package minsecurity.identity;
+
+import minsecurity.Common;
+import minsecurity.certificate.cert.CertUtils;
+import minsecurity.certificate.cert.Certificate;
+import minsecurity.crypto.sm2.SM2KeyPair;
+import minsecurity.identity.persist.Persist;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+import java.util.concurrent.TimeUnit;
+
+@BenchmarkMode(Mode.AverageTime)
+@State(Scope.Thread)
+@Fork(1)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@Warmup(iterations = 3)
+@Measurement(iterations = 5)
+public class PersistBenchmark {
+ /**
+ * 随机生成身份数据
+ * @return Identity
+ */
+ private Identity createRandomIdentity() throws Exception{
+ // 测试PersistIdentity
+ SM2KeyPair pair = SM2KeyPair.generateKeyPair();
+ Identity identity = new Identity();
+ identity.setName("wzq"+Math.random());
+ KeyParam keyParam = new KeyParam();
+ keyParam.PublicKeyAlgorithm = 0;
+ keyParam.SignatureAlgorithm = 0;
+ identity.setKeyParam(keyParam);
+ identity.setPrikey(pair.getSm2PrivateKey());
+ identity.setPubkey(pair.getSm2PublicKey());
+ identity.setPasswd("2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99");
+ // identity.lock("0123456789abcdef", Common.SM4ECB);
+ Certificate cert = new Certificate();
+ cert.setVersion(1);
+ cert.setSerialNumber(1);
+ cert.setPublicKey(pair.getSm2PublicKey());
+ cert.setSignatureAlgorithm(Common.SM3withSM2); // TODO 名字有误? SM2withSM3?
+ cert.setPublicKeyAlgorithm(Common.SM2);
+ cert.setIssueTo("root");
+ cert.setIssuer("root");
+ long timestamp = System.currentTimeMillis() / 1000;
+ cert.setTimestamp(timestamp); // 10bit timestamp
+ cert.setNotAfter(timestamp); // 10bit timestamp
+ cert.setNotBefore(timestamp + 1000); // 10bit timestamp
+ cert.setKeyUsage(Common.CertSign);
+ cert.setCA(true);
+ CertUtils.signCert(cert, pair.getSm2PrivateKey());
+
+ identity.setCert(cert);
+ return identity;
+ }
+
+ @Benchmark
+ public void testPersistAndDeleteIdentity() throws Exception {
+ Identity id = createRandomIdentity();
+ Persist.persistIdentity(id);
+ Persist.deleteIdentityByNameFromStorage(id.getName());
+ }
+
+ @Benchmark
+ public void testSetIdentity() throws Exception {
+ String name = "wzq0.6597381351293033"; // 预先存储好的身份名
+ Persist.setDefaultIdentityByNameInStorage(name);
+ }
+
+ public static void main(String[] args) throws RunnerException {
+ Options opt = new OptionsBuilder()
+ .include(PersistBenchmark.class.getSimpleName())
+ .build();
+ new Runner(opt).run();
+ }
+}
diff --git a/src/test/java/minsecurity/identity/TestPersist.java b/src/test/java/minsecurity/identity/TestPersist.java
index 13a16a8..37e0e6d 100644
--- a/src/test/java/minsecurity/identity/TestPersist.java
+++ b/src/test/java/minsecurity/identity/TestPersist.java
@@ -52,7 +52,7 @@ public class TestPersist {
identity.setPrikey(pair.getSm2PrivateKey());
identity.setPubkey(pair.getSm2PublicKey());
identity.setPasswd("2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99");
- identity.lock("0123456789abcdef", Common.SM4ECB);
+ // identity.lock("0123456789abcdef", Common.SM4ECB);
Certificate cert = new Certificate();
cert.setVersion(1);
cert.setSerialNumber(1);
diff --git a/src/test/java/minsecurity/identity/sqlite/SqliteBenchmark.java b/src/test/java/minsecurity/identity/sqlite/SqliteBenchmark.java
new file mode 100644
index 0000000..c71adf2
--- /dev/null
+++ b/src/test/java/minsecurity/identity/sqlite/SqliteBenchmark.java
@@ -0,0 +1,34 @@
+package minsecurity.identity.sqlite;
+
+import minsecurity.identity.persist.sqlite.Sqlite;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+import java.util.concurrent.TimeUnit;
+
+@BenchmarkMode(Mode.AverageTime)
+@State(Scope.Thread)
+@Fork(1)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@Warmup(iterations = 3)
+@Measurement(iterations = 5)
+public class SqliteBenchmark {
+ /**
+ * Sqlite基准测试
+ * @throws Exception
+ */
+ @Benchmark
+ public void testOpenDefault() throws Exception {
+ Sqlite.getInstance().openDefault();
+ }
+
+ public static void main(String[] args) throws RunnerException {
+ Options opt = new OptionsBuilder()
+ .include(SqliteBenchmark.class.getSimpleName())
+ .build();
+ new Runner(opt).run();
+ }
+}
diff --git a/src/test/java/security/IdentifyManagerBenchmark.java b/src/test/java/security/IdentifyManagerBenchmark.java
new file mode 100644
index 0000000..89ec121
--- /dev/null
+++ b/src/test/java/security/IdentifyManagerBenchmark.java
@@ -0,0 +1,111 @@
+package security;
+
+import minsecurity.Common;
+import minsecurity.certificate.cert.CertUtils;
+import minsecurity.certificate.cert.Certificate;
+import minsecurity.crypto.sm2.SM2KeyPair;
+import minsecurity.identity.Identity;
+import minsecurity.identity.IdentityBenchmark;
+import minsecurity.identity.KeyParam;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+import java.util.concurrent.TimeUnit;
+
+@BenchmarkMode(Mode.AverageTime)
+@State(Scope.Thread)
+@Fork(1)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@Warmup(iterations = 3)
+@Measurement(iterations = 5)
+public class IdentifyManagerBenchmark {
+ /**
+ * 随机生成身份数据
+ * @return Identity
+ */
+ private Identity createRandomIdentity() throws Exception{
+ // 测试PersistIdentity
+ SM2KeyPair pair = SM2KeyPair.generateKeyPair();
+ Identity identity = new Identity();
+ identity.setName("wzq"+Math.random());
+ KeyParam keyParam = new KeyParam();
+ keyParam.PublicKeyAlgorithm = 0;
+ keyParam.SignatureAlgorithm = 0;
+ identity.setKeyParam(keyParam);
+ identity.setPrikey(pair.getSm2PrivateKey());
+ identity.setPubkey(pair.getSm2PublicKey());
+ identity.setPasswd("2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99");
+ // identity.lock("0123456789abcdef", Common.SM4ECB);
+ Certificate cert = new Certificate();
+ cert.setVersion(1);
+ cert.setSerialNumber(1);
+ cert.setPublicKey(pair.getSm2PublicKey());
+ cert.setSignatureAlgorithm(Common.SM3withSM2); // TODO 名字有误? SM2withSM3?
+ cert.setPublicKeyAlgorithm(Common.SM2);
+ cert.setIssueTo("root");
+ cert.setIssuer("root");
+ long timestamp = System.currentTimeMillis() / 1000;
+ cert.setTimestamp(timestamp); // 10bit timestamp
+ cert.setNotAfter(timestamp); // 10bit timestamp
+ cert.setNotBefore(timestamp + 1000); // 10bit timestamp
+ cert.setKeyUsage(Common.CertSign);
+ cert.setCA(true);
+ CertUtils.signCert(cert, pair.getSm2PrivateKey());
+
+ identity.setCert(cert);
+ return identity;
+ }
+
+ @Benchmark
+ public void testIdentifyManagerInit(){
+ IdentifyManager manager = new IdentifyManager();
+ }
+
+ @Benchmark
+ public void testGetIdentityByName(){
+ IdentifyManager manager = new IdentifyManager();
+ String name = "wzq0.6597381351293033"; // 预先存储好的身份名
+ manager.getIdentityByName(name);
+ }
+
+ @Benchmark
+ public void testSaveAndDelete() throws Exception {
+ IdentifyManager manager = new IdentifyManager();
+ Identity id = createRandomIdentity();
+ manager.saveIdentity(id, true, true);
+ manager.deleteIdentityByName(id.getName(), true);
+ }
+
+ @Benchmark
+ public void testSetDefault() throws Exception {
+ IdentifyManager manager = new IdentifyManager();
+ String name = "wzq0.6597381351293033"; // 预先存储好的身份名
+ manager.setDefaultIdentity(manager.getIdentifies().get(name), true);
+ }
+
+ @Benchmark
+ public void testExistIdentity(){
+ IdentifyManager manager = new IdentifyManager();
+ String name = "wzq0.6597381351293033"; // 预先存储好的身份名
+ manager.existIdentity(name);
+ manager.existIdentity(name + "test");
+ }
+
+ @Benchmark
+ public void testCreateIdentityByNameAndDelete() throws Exception {
+ IdentifyManager manager = new IdentifyManager();
+ String s = "wzq"+Math.random();
+ manager.createIdentityByName(s, "1234", true);
+ manager.deleteIdentityByName(s, true);
+ }
+
+ public static void main(String[] args) throws RunnerException {
+ Options opt = new OptionsBuilder()
+ .include(IdentifyManagerBenchmark.class.getSimpleName())
+ .build();
+ new Runner(opt).run();
+ }
+}
diff --git a/src/test/java/security/KeychainBenchmark.java b/src/test/java/security/KeychainBenchmark.java
new file mode 100644
index 0000000..44c9ff5
--- /dev/null
+++ b/src/test/java/security/KeychainBenchmark.java
@@ -0,0 +1,178 @@
+package security;
+
+import component.Identifier;
+import component.TTL;
+import encoding.VlInt;
+import minsecurity.Common;
+import minsecurity.certificate.cert.CertUtils;
+import minsecurity.certificate.cert.Certificate;
+import minsecurity.crypto.sm2.SM2KeyPair;
+import minsecurity.identity.Identity;
+import minsecurity.identity.KeyParam;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+import packet.CPacket;
+import packet.Data;
+import packet.Interest;
+
+import java.util.concurrent.TimeUnit;
+
+@BenchmarkMode(Mode.AverageTime)
+@State(Scope.Thread)
+@Fork(1)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@Warmup(iterations = 3)
+@Measurement(iterations = 5)
+public class KeychainBenchmark {
+ /**
+ * 随机生成身份数据
+ * @return Identity
+ */
+ private Identity createRandomIdentity() throws Exception{
+ // 测试PersistIdentity
+ SM2KeyPair pair = SM2KeyPair.generateKeyPair();
+ Identity identity = new Identity();
+ identity.setName("wzq"+Math.random());
+ KeyParam keyParam = new KeyParam();
+ keyParam.PublicKeyAlgorithm = 0;
+ keyParam.SignatureAlgorithm = 0;
+ identity.setKeyParam(keyParam);
+ identity.setPrikey(pair.getSm2PrivateKey());
+ identity.setPubkey(pair.getSm2PublicKey());
+ identity.setPasswd("2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99");
+ // identity.lock("0123456789abcdef", Common.SM4ECB);
+ Certificate cert = new Certificate();
+ cert.setVersion(1);
+ cert.setSerialNumber(1);
+ cert.setPublicKey(pair.getSm2PublicKey());
+ cert.setSignatureAlgorithm(Common.SM3withSM2); // TODO 名字有误? SM2withSM3?
+ cert.setPublicKeyAlgorithm(Common.SM2);
+ cert.setIssueTo("root");
+ cert.setIssuer("root");
+ long timestamp = System.currentTimeMillis() / 1000;
+ cert.setTimestamp(timestamp); // 10bit timestamp
+ cert.setNotAfter(timestamp); // 10bit timestamp
+ cert.setNotBefore(timestamp + 1000); // 10bit timestamp
+ cert.setKeyUsage(Common.CertSign);
+ cert.setCA(true);
+ CertUtils.signCert(cert, pair.getSm2PrivateKey());
+
+ identity.setCert(cert);
+ return identity;
+ }
+
+ @Benchmark
+ public void testCreateKeyChain() throws Exception {
+ KeyChain keyChain = new KeyChain();
+ }
+
+ @Benchmark
+ public void testInitialKeyChain() throws Exception {
+ // 测试设置新身份为当前身份
+ KeyChain keyChain = new KeyChain();
+ // Identity id = createRandomIdentity();
+ // keyChain.getIdentifyManager().setDefaultIdentity(id, true);
+ // 输入密码用于解锁身份
+ // keyChain.setCurrentIdentity(keyChain.getIdentifyManager().getDefaultIdentity(), "0123456789abcdef");
+ }
+
+ @Benchmark
+ public void testSignAndVerifyInterest() throws Exception {
+ // 测试设置新身份为当前身份
+ KeyChain keyChain = new KeyChain();
+ // Identity id = createRandomIdentity();
+ // keyChain.getIdentifyManager().setDefaultIdentity(id, true);
+ // 输入密码用于解锁身份
+ // keyChain.setCurrentIdentity(keyChain.getIdentifyManager().getDefaultIdentity(), "0123456789abcdef");
+
+ // 身份允许签名与验证签名
+ Identifier id1 = new Identifier("/min/pku/sz");
+ Identifier id2 = new Identifier("/install");
+
+ //////////////////// 构建兴趣包 ////////////////////////
+ Interest interest = new Interest();
+ interest.minPacket.packetType = new VlInt(3);
+ interest.setName(id1);
+ interest.canBePrefix.setCanBePrefix(true);
+ interest.mustBeRefresh.setMustBeRefresh(true);
+ interest.nonce.setNonce(1234);
+ interest.hopLimit.setHopLimit(1234);
+ interest.congestionMark.setCongestionLevel(1234);
+ interest.ttl.setTtl(1234);
+ interest.payload.setValue(new byte[]{1, 2, 3, 4, 5});
+
+
+ // 正常测试签名与验签
+ keyChain.signInterest(interest);
+ keyChain.verifyInterest(interest);
+ }
+
+ @Benchmark
+ public void testSignAndVerifyCPacket() throws Exception {
+ // 测试设置新身份为当前身份
+ KeyChain keyChain = new KeyChain();
+ // Identity id = createRandomIdentity();
+ // keyChain.getIdentifyManager().setDefaultIdentity(id, true);
+ // 输入密码用于解锁身份
+ // keyChain.setCurrentIdentity(keyChain.getIdentifyManager().getDefaultIdentity(), "0123456789abcdef");
+
+ // 身份允许签名与验证签名
+ Identifier id1 = new Identifier("/min/pku/sz");
+ Identifier id2 = new Identifier("/install");
+
+ CPacket cPacket = new CPacket();
+ cPacket.minPacket.packetType = new VlInt(3);
+ cPacket.setSrcIdentifier(id1);
+ cPacket.setDstIdentifier(id2);
+ cPacket.setTtl(new TTL(16546418374324163L));
+ cPacket.payload.setValue(new byte[]{1, 2, 3, 4, 6});
+
+ // 正常测试签名与验签
+ keyChain.signCPacket(cPacket);
+ keyChain.verifyCPacket(cPacket);
+ }
+
+ @Benchmark
+ public void testSignAndVerifyData() throws Exception {
+ // 测试设置新身份为当前身份
+ KeyChain keyChain = new KeyChain();
+ // Identity id = createRandomIdentity();
+ // keyChain.getIdentifyManager().setDefaultIdentity(id, true);
+ // 输入密码用于解锁身份
+ // keyChain.setCurrentIdentity(keyChain.getIdentifyManager().getDefaultIdentity(), "0123456789abcdef");
+ //////////////////// 构建Data包 ////////////////////////
+ Data data = new Data();
+ data.freshnessPeriod.setFreshnessPeriod(02346345465453L);
+ data.payload.setValue(new byte[]{1, 2, 3, 4, 5});
+ data.congestionMark.setCongestionLevel(1234L);
+ Identifier id2 = new Identifier("/wzq");
+ data.setName(id2);
+ data.minPacket.packetType = new VlInt(3);
+ // 正常测试签名与验签
+ keyChain.signData(data);
+ keyChain.verifyData(data);
+ }
+
+ @Benchmark
+ public void testExportAndImportSafeBag() throws Exception {
+ // 测试设置新身份为当前身份
+ KeyChain keyChain = new KeyChain();
+ // Identity id = createRandomIdentity();
+ // keyChain.getIdentifyManager().setDefaultIdentity(id, true);
+ // 输入密码用于解锁身份
+ // keyChain.setCurrentIdentity(keyChain.getIdentifyManager().getDefaultIdentity(), "0123456789abcdef");
+ // 正常导入导出 通过
+ Identity id2 = createRandomIdentity();
+ SafeBag bag = keyChain.exportSafeBag(id2, "1234");
+ keyChain.importSafeBag(bag, "1234", true);
+ }
+ public static void main(String[] args) throws RunnerException {
+ Options opt = new OptionsBuilder()
+ .include(KeychainBenchmark.class.getSimpleName())
+ .build();
+ new Runner(opt).run();
+ }
+}