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

@@ -39,6 +39,10 @@ public class Sm2Base {
}
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Sm2Base.class);
/*
* 以下为SM2推荐曲线参数
*/
public static final SM2P256V1Curve CURVE = new SM2P256V1Curve();
public final static BigInteger SM2_ECC_P = CURVE.getQ();
public final static BigInteger SM2_ECC_A = CURVE.getA().toBigInteger();
@@ -56,6 +60,14 @@ public class Sm2Base {
private static final String PEM_STRING_PUBLIC = "PUBLIC KEY";
private static final String PEM_STRING_ECPRIVATEKEY = "EC PRIVATE KEY";
/**
* 生成BC自定义的SM2公私钥
* @param
* @return org.bouncycastle.crypto.AsymmetricCipherKeyPair
* @author hongyu guo
* @date 2021/3/7
**/
public static AsymmetricCipherKeyPair generateKeyPairParameter(){
SecureRandom random = new SecureRandom();
ECKeyGenerationParameters keyGenerationParams = new ECKeyGenerationParameters(DOMAIN_PARAMS,
@@ -66,12 +78,27 @@ public class Sm2Base {
return keyPair;
}
/**
* 生成java.security.KeyPair类型的SM2公私钥
* @param
* @return java.security.KeyPair
* @author hongyu guo
* @date 2021/3/7
**/
public static KeyPair generateKeyPair() throws NoSuchProviderException, NoSuchAlgorithmException,
InvalidAlgorithmParameterException {
SecureRandom random = new SecureRandom();
return generateKeyPair(DOMAIN_PARAMS, random);
}
/**
* 生成java.security.KeyPair类型的SM2公私钥, 需自定义曲线参数
* @param domainParameters
* @param random
* @return
* @author hongyu guo
* @date 2021/3/7
**/
public static KeyPair generateKeyPair(ECDomainParameters domainParameters, SecureRandom random)
throws NoSuchProviderException, NoSuchAlgorithmException,
InvalidAlgorithmParameterException {
@@ -82,7 +109,13 @@ public class Sm2Base {
return kpg.generateKeyPair();
}
/**
* BC公私钥转换为java.security.KeyPair公私钥
* @param bcKeyPair
* @return
* @author hongyu guo
* @date 2021/3/7
**/
public static KeyPair convertBcToJceKeyPair(AsymmetricCipherKeyPair bcKeyPair) throws Exception {
byte[] pkcs8Encoded = PrivateKeyInfoFactory.createPrivateKeyInfo(bcKeyPair.getPrivate()).getEncoded();
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(pkcs8Encoded);
@@ -92,13 +125,27 @@ public class Sm2Base {
return new KeyPair(keyFac.generatePublic(spkiKeySpec), keyFac.generatePrivate(pkcs8KeySpec));
}
/**
* java.security.KeyPair转换为BC类型的公私钥对
* @param keyPair
* @return
* @author hongyu guo
* @date 2021/3/7
**/
public static AsymmetricCipherKeyPair convertKeyPair2Bc(KeyPair keyPair) {
ECPrivateKeyParameters priKey = convertPrivateKeyToParameters((BCECPrivateKey) keyPair.getPrivate());
ECPublicKeyParameters pubKey = convertPublicKeyToParameters((BCECPublicKey) keyPair.getPublic());
return new AsymmetricCipherKeyPair(priKey,pubKey);
}
/**
* BCECPrivateKey类型私钥转化为ECPrivateKeyParameters类型的私钥,
* 调用者若想将java.security.PrivateKey转化为ECPrivateKeyParameters, 调用时将其强制转换为BCECPrivateKey类型
* @param ecPriKey
* @return ECPrivateKeyParameters
* @author hongyu guo
* @date 2021/3/7
**/
public static ECPrivateKeyParameters convertPrivateKeyToParameters(BCECPrivateKey ecPriKey) {
ECParameterSpec parameterSpec = ecPriKey.getParameters();
ECDomainParameters domainParameters = new ECDomainParameters(parameterSpec.getCurve(), parameterSpec.getG(),
@@ -106,6 +153,14 @@ public class Sm2Base {
return new ECPrivateKeyParameters(ecPriKey.getD(), domainParameters);
}
/**
* BCECPublicKey类型私钥转化为ECPublicKeyParameters类型的私钥,
* 调用者若想将java.security.PublicKey转化为ECPublicKeyParameters, 调用时将其强制转换为BCECPublicKey类型
* @param ecPubKey
* @return ECPrivateKeyParameters
* @author hongyu guo
* @date 2021/3/7
**/
public static ECPublicKeyParameters convertPublicKeyToParameters(BCECPublicKey ecPubKey) {
ECParameterSpec parameterSpec = ecPubKey.getParameters();
ECDomainParameters domainParameters = new ECDomainParameters(parameterSpec.getCurve(), parameterSpec.getG(),
@@ -23,7 +23,20 @@ import java.security.SecureRandom;
public class Sm2PrivateKey implements PrivateKeyInterface {
public Sm2PrivateKey(){}
/*
* @param d
* @return
* @author hongyu guo
* @date 2021/3/7
**/
/*
* @param d 大数
* @return
* @author hongyu guo
* @date 2021/3/7
**/
public Sm2PrivateKey(byte[] d) {
if(d.length == 32 || d.length == 33)
privateKey = new ECPrivateKeyParameters(new BigInteger(d), Sm2Base.DOMAIN_PARAMS);
@@ -15,7 +15,7 @@ import java.security.SecureRandom;
/*
* @Author: hongyu guo
* @Description: 国密sm2 非对称加密公钥
* @Description: 国密sm2 非对称加密公钥, 实现PublicKeyInterface中的方法
* @Version: 1.0.0
* @Date: 17:32 2021/03/03
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
@@ -27,11 +27,22 @@ public class Sm2PublicKey implements PublicKeyInterface {
public Sm2PublicKey(byte[] xBytes, byte[] yBytes, ECCurve curve, ECDomainParameters domainParameters){
publicKey = createPublicKey(xBytes,yBytes,curve,domainParameters);
}
/**
* 使用SM2推荐曲线参数
* @param xBytes 曲线x参数
* @param yBytes 曲线y参数
* @return
* @author ghy
* @date 2021/3/7
**/
public Sm2PublicKey(byte[] xBytes, byte[] yBytes){
this(xBytes,yBytes, Sm2Base.CURVE, Sm2Base.DOMAIN_PARAMS);
}
public Sm2PublicKey(byte[] bytes){
setBytes(bytes);
}
@Override
@@ -55,6 +66,12 @@ public class Sm2PublicKey implements PublicKeyInterface {
return true;
}
/**
* @param content
* @return byte[] 密文
* @author ghy
* @date 2021/3/7
**/
@Override
public byte[] encrypt(byte[] content) throws InvalidCipherTextException {
SM2Engine engine = new SM2Engine(SM2Engine.Mode.C1C2C3);
@@ -108,7 +125,10 @@ public class Sm2PublicKey implements PublicKeyInterface {
}
return result;
}
private ECPublicKeyParameters publicKey;
////////////////////////////////////////////// private end //////////////////////////////////////////////
ECPublicKeyParameters publicKey;
}