mirror of
https://gitee.com/willfree/min-dev-java.git
synced 2026-10-04 19:42:01 +08:00
hash & sm4 & cert(未测试)
This commit is contained in:
1 parent
e515af4123
commit
3868d65fae
26 files changed
+1873
-15
No files matched your search
@@ -0,0 +1,107 @@
|
||||
package minsecurity.certificate.cert;
|
||||
|
||||
import minsecurity.Common;
|
||||
import minsecurity.crypto.PublicKeyInterface;
|
||||
import minsecurity.crypto.sm2.Sm2PublicKey;
|
||||
|
||||
/*
|
||||
* @Author: hongyu guo
|
||||
* @Description:
|
||||
* @Version: 1.0.0
|
||||
* @Date: 17:09 2021/03/05
|
||||
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
||||
*/
|
||||
public class CertUtils {
|
||||
|
||||
public static final int VERSION1 = 1;
|
||||
|
||||
public static InnerCertificate parseCertToInnerCert(Certificate certificate){
|
||||
TbsCertificate tbsCertificate = new TbsCertificate();
|
||||
tbsCertificate.setVersion(certificate.getVersion());
|
||||
tbsCertificate.setSerialNumber(certificate.getSerialNumber());
|
||||
tbsCertificate.setPublicKey(certificate.getPublicKey().getBytes());
|
||||
tbsCertificate.setSignatureAlgorithm(certificate.getSignatureAlgorithm());
|
||||
tbsCertificate.setPublicKeyAlgorithm(certificate.getPublicKeyAlgorithm());
|
||||
tbsCertificate.setIssueTo(certificate.getIssueTo());
|
||||
tbsCertificate.setIssuer(certificate.getIssuer());
|
||||
tbsCertificate.setNotAfter(certificate.getNotAfter());
|
||||
tbsCertificate.setNotBefore(certificate.getNotBefore());
|
||||
tbsCertificate.setKeyUsage(certificate.getKeyUsage());
|
||||
tbsCertificate.setCA(certificate.isCA());
|
||||
tbsCertificate.setTimestamp(certificate.getTimestamp());
|
||||
|
||||
InnerCertificate innerCertificate = new InnerCertificate();
|
||||
innerCertificate.setSignatureAlgorithm(certificate.getSignatureAlgorithm());
|
||||
innerCertificate.setSignatureValue(certificate.getSignature());
|
||||
innerCertificate.setTbsCertificate(tbsCertificate);
|
||||
return innerCertificate;
|
||||
}
|
||||
|
||||
public static Certificate parseInnerCertToCert(InnerCertificate i){
|
||||
Certificate certificate = new Certificate();
|
||||
|
||||
certificate.setVersion(i.getTbsCertificate().getVersion());
|
||||
certificate.setSerialNumber(i.getTbsCertificate().getSerialNumber());
|
||||
PublicKeyInterface publicKey = unMarshalPublicKey(i.getTbsCertificate().getPublicKey(),i.getSignatureAlgorithm());
|
||||
certificate.setPublicKey(publicKey);
|
||||
certificate.setSignature(i.getSignatureValue());
|
||||
certificate.setSignatureAlgorithm(i.getTbsCertificate().getSignatureAlgorithm());
|
||||
certificate.setPublicKeyAlgorithm(i.getTbsCertificate().getPublicKeyAlgorithm());
|
||||
certificate.setIssueTo(i.getTbsCertificate().getIssueTo());
|
||||
certificate.setIssuer(i.getTbsCertificate().getIssuer());
|
||||
certificate.setNotBefore(i.getTbsCertificate().getNotBefore());
|
||||
certificate.setNotAfter(i.getTbsCertificate().getNotAfter());
|
||||
certificate.setKeyUsage(i.getTbsCertificate().getKeyUsage());
|
||||
certificate.setCA(i.getTbsCertificate().isCA());
|
||||
certificate.setTimestamp(i.getTbsCertificate().getTimestamp());
|
||||
|
||||
return certificate;
|
||||
}
|
||||
|
||||
public static PublicKeyInterface unMarshalPublicKey(byte[] bytesOfPublicKey, int algorithm) {
|
||||
if (bytesOfPublicKey == null || bytesOfPublicKey.length == 0) {
|
||||
return null;
|
||||
}
|
||||
switch (algorithm) {
|
||||
case Common.SM2:
|
||||
Sm2PublicKey sm2PublicKey = new Sm2PublicKey();
|
||||
sm2PublicKey.setBytes(bytesOfPublicKey);
|
||||
return sm2PublicKey;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean checkDuration(InnerCertificate innerCertificate){
|
||||
long curTime = System.currentTimeMillis();
|
||||
if(innerCertificate.getTbsCertificate().getNotAfter() > curTime)
|
||||
return false;
|
||||
if(innerCertificate.getTbsCertificate().getNotBefore() < curTime)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public static boolean checkSign(InnerCertificate cert, PublicKeyInterface publicKey) throws Exception {
|
||||
switch (cert.getTbsCertificate().getSignatureAlgorithm()){
|
||||
case Common.SM3withSM2:
|
||||
// TODO: 证书序列化方法
|
||||
byte[] bytesOfCert = serialization(cert);
|
||||
// byte[] digest = HashAlgo.sm3(bytesOfCert);
|
||||
return publicKey.verify(bytesOfCert, cert.getSignatureValue());
|
||||
default:
|
||||
throw new Exception("未定义的签名方法");
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: 证书序列化方法
|
||||
public static byte[] serialization(InnerCertificate innerCertificate){
|
||||
return new byte[0];
|
||||
}
|
||||
|
||||
// TODO: 证书反序列化
|
||||
public static InnerCertificate deserialization(byte[] bytesOfCert){
|
||||
return new InnerCertificate();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user