security部分添加注释

This commit is contained in:
ghy committed 2021-03-07 20:17:19 +08:00
1 parent 879e09e879
commit 9d370a5353
12 files changed
+396 -141

No files matched your search

@@ -4,20 +4,13 @@ import minsecurity.Common;
import minsecurity.crypto.sm2.Sm2Base;
import minsecurity.crypto.sm2.Sm2PrivateKey;
import minsecurity.crypto.sm2.Sm2PublicKey;
import minsecurity.crypto.sm2.TestSm2;
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.junit.Assert;
import org.junit.Test;
import static org.junit.Assert.*;
import org.slf4j.LoggerFactory;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.security.*;
/*
* @Author: hongyu guo
* @Description:
@@ -45,11 +38,33 @@ public class TestCert {
"issueTo","issuer",System.currentTimeMillis(),
System.currentTimeMillis() + 200, Common.CertSign,
true,System.currentTimeMillis());
certificate.signCert(sm2PrivateKey);
CertUtils.signCert(certificate, sm2PrivateKey);
// logger.debug(certificate.toString());
boolean verify = Certificate.verifyCert(certificate, certificate);
// 根证书验签
boolean verify = CertUtils.verifyCert(certificate, certificate);
assertTrue(verify);
AsymmetricCipherKeyPair keyPair2 = Sm2Base.generateKeyPairParameter();
ECPrivateKeyParameters priKey2 = (ECPrivateKeyParameters) keyPair2.getPrivate();
ECPublicKeyParameters pubKey2 = (ECPublicKeyParameters) keyPair2.getPublic();
byte[] d2 = priKey2.getD().toByteArray();
// d = Arrays.copyOf(d,32);
byte[] x2 = pubKey2.getQ().getAffineXCoord().getEncoded();
byte[] y2 = pubKey2.getQ().getAffineYCoord().getEncoded();
Sm2PrivateKey sm2PrivateKey2 = new Sm2PrivateKey(d2);
Sm2PublicKey sm2PublicKey2 = new Sm2PublicKey(x2, y2);
Certificate sub = new Certificate(1,2,sm2PublicKey2,
null, Common.SM3withSM2,Common.SM2,
"sub","issuer",System.currentTimeMillis() - 1000,
System.currentTimeMillis() + 2000, Common.CertSign,
false, System.currentTimeMillis());
CertUtils.signCert(sub, sm2PrivateKey);
// 下层证书验签
boolean verify2 = CertUtils.verifyCert(certificate, sub);
assertTrue(verify2);
}
@Test
@@ -70,17 +85,17 @@ public class TestCert {
"issueTo","issuer",System.currentTimeMillis(),
System.currentTimeMillis() + 111111, Common.CertSign,
true,System.currentTimeMillis());
certificate.signCert(sm2PrivateKey);
CertUtils.signCert(certificate, sm2PrivateKey);
String pem = certificate.toPem(null,0);
Certificate certFromPem = Certificate.fromPem(pem, null,0);
String pem = CertUtils.toPem(certificate,null,0);
Certificate certFromPem = CertUtils.fromPem(pem, null,0);
logger.debug(certFromPem.toString());
assertTrue(Certificate.verifyCert(certFromPem,certFromPem));
assertTrue(CertUtils.verifyCert(certFromPem,certFromPem));
String pem2 = certificate.toPem(new byte[]{1,2,3,4,5,6,7,8},Common.SM4ECB);
Certificate certFromPem2 = Certificate.fromPem(pem2, new byte[]{1,2,3,4,5,6,7,8},Common.SM4ECB);
String pem2 = CertUtils.toPem(certificate, new byte[]{1,2,3,4,5,6,7,8},Common.SM4ECB);
Certificate certFromPem2 = CertUtils.fromPem(pem2, new byte[]{1,2,3,4,5,6,7,8},Common.SM4ECB);
logger.debug(certFromPem.toString());
assertTrue(Certificate.verifyCert(certFromPem2,certFromPem2));
assertTrue(CertUtils.verifyCert(certFromPem2,certFromPem2));
}
}
@@ -32,6 +32,14 @@ import static minsecurity.certificate.X509.X509CertMaker.makeRootCA;
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
*/
public class TestX509 {
// WARNING: X509不需要测试!!!!!!!
// WARNING: X509不需要测试!!!!!!!
// WARNING: X509不需要测试!!!!!!!
// WARNING: X509不需要测试!!!!!!!
// WARNING: X509不需要测试!!!!!!!
static {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
}
@@ -1,5 +1,8 @@
package minsecurity.crypto.sm2;
package minsecurity.crypto;
import minsecurity.crypto.sm2.Sm2Base;
import minsecurity.crypto.sm2.Sm2PrivateKey;
import minsecurity.crypto.sm2.Sm2PublicKey;
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.crypto.CryptoException;
import org.bouncycastle.crypto.InvalidCipherTextException;
@@ -11,6 +14,8 @@ import static org.junit.Assert.*;
import org.slf4j.LoggerFactory;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
/*
* @Author: hongyu guo
@@ -86,6 +91,7 @@ public class TestSm2 {
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);
@@ -94,4 +100,36 @@ public class TestSm2 {
boolean flag = sm2PublicKey.verify(ByteUtils.fromHexString(content), digest);
assertTrue(flag);
}
// 按照艾宾浩斯记忆曲线
// 第x天刷完题, 需要在第x+1,x+2,x+4,x+7,x+15时重新记忆
public static void testMemory(int total, int numsInOneDay){
int days = total / numsInOneDay + 1;
List<Integer>[] res = new List[days + 15];
for(int i = 0; i < days + 15; i++){
res[i] = new ArrayList<Integer>();
}
for(int i = 0; i < days; i++){
for(int j = 1; j <= numsInOneDay; j++){
if(i * numsInOneDay + j <= total) {
res[i].add((i * numsInOneDay + j) * -1);
res[i + 1].add(i * numsInOneDay + j);
res[i + 2].add(i * numsInOneDay + j);
res[i + 4].add(i * numsInOneDay + j);
res[i + 7].add(i * numsInOneDay + j);
res[i + 15].add(i * numsInOneDay + j);
}
}
}
for(int i = 0; i < days + 15; i++){
System.out.println("第" + (i + 1) + "天: " + res[i]);
}
}
public static void main(String[] args) {
testMemory(75,2);
}
}