add ECKeyUtil

This commit is contained in:
Looly 2020-09-13 09:34:35 +08:00
parent 58b1cae320
commit f05883a53a
2 changed files with 28 additions and 28 deletions

View File

@ -1,6 +1,5 @@
package cn.hutool.crypto; package cn.hutool.crypto;
import cn.hutool.core.util.HexUtil;
import org.bouncycastle.asn1.x9.X9ECParameters; import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.crypto.params.AsymmetricKeyParameter; import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import org.bouncycastle.crypto.params.ECDomainParameters; import org.bouncycastle.crypto.params.ECDomainParameters;
@ -16,8 +15,6 @@ import org.bouncycastle.math.ec.ECCurve;
import java.io.InputStream; import java.io.InputStream;
import java.math.BigInteger; import java.math.BigInteger;
import java.security.GeneralSecurityException;
import java.security.InvalidKeyException;
import java.security.Key; import java.security.Key;
import java.security.PrivateKey; import java.security.PrivateKey;
import java.security.PublicKey; import java.security.PublicKey;
@ -83,12 +80,7 @@ public class BCUtil {
// 根据曲线恢复公钥格式 // 根据曲线恢复公钥格式
final ECNamedCurveSpec ecSpec = new ECNamedCurveSpec(curveName, curve, x9ECParameters.getG(), x9ECParameters.getN()); final ECNamedCurveSpec ecSpec = new ECNamedCurveSpec(curveName, curve, x9ECParameters.getG(), x9ECParameters.getN());
return KeyUtil.generatePublicKey("EC", new ECPublicKeySpec(point, ecSpec));
try {
return KeyUtil.getKeyFactory("EC").generatePublic(new ECPublicKeySpec(point, ecSpec));
} catch (GeneralSecurityException e) {
throw new CryptoException(e);
}
} }
/** /**
@ -141,27 +133,17 @@ public class BCUtil {
* @since 5.2.0 * @since 5.2.0
*/ */
public static AsymmetricKeyParameter toParams(Key key) { public static AsymmetricKeyParameter toParams(Key key) {
try { return ECKeyUtil.toParams(key);
if (key instanceof PrivateKey) {
return ECUtil.generatePrivateKeyParameter((PrivateKey) key);
} else if (key instanceof PublicKey) {
return ECUtil.generatePublicKeyParameter((PublicKey) key);
}
} catch (InvalidKeyException e) {
throw new CryptoException(e);
}
return null;
} }
/** /**
* 转换为 ECPrivateKeyParameters * 转换为 ECPrivateKeyParameters
* *
* @param dHex 私钥d值16进制字符串 * @param d 私钥d值
* @return ECPrivateKeyParameters * @return ECPrivateKeyParameters
*/ */
public static ECPrivateKeyParameters toSm2Params(String dHex) { public static ECPrivateKeyParameters toSm2Params(String d) {
return toSm2Params(HexUtil.toBigInteger(dHex)); return ECKeyUtil.toSm2PrivateParams(d);
} }
/** /**
@ -182,7 +164,7 @@ public class BCUtil {
* @return ECPrivateKeyParameters * @return ECPrivateKeyParameters
*/ */
public static ECPrivateKeyParameters toSm2Params(byte[] d) { public static ECPrivateKeyParameters toSm2Params(byte[] d) {
return toSm2Params(new BigInteger(d)); return ECKeyUtil.toSm2PrivateParams(d);
} }
/** /**
@ -203,7 +185,7 @@ public class BCUtil {
* @return ECPrivateKeyParameters * @return ECPrivateKeyParameters
*/ */
public static ECPrivateKeyParameters toSm2Params(BigInteger d) { public static ECPrivateKeyParameters toSm2Params(BigInteger d) {
return toParams(d, SmUtil.SM2_DOMAIN_PARAMS); return ECKeyUtil.toSm2PrivateParams(d);
} }
/** /**
@ -237,7 +219,7 @@ public class BCUtil {
* @return ECPublicKeyParameters * @return ECPublicKeyParameters
*/ */
public static ECPublicKeyParameters toSm2Params(String xHex, String yHex) { public static ECPublicKeyParameters toSm2Params(String xHex, String yHex) {
return toParams(xHex, yHex, SmUtil.SM2_DOMAIN_PARAMS); return ECKeyUtil.toSm2PublicParams(xHex, yHex);
} }
/** /**
@ -249,7 +231,7 @@ public class BCUtil {
* @return ECPublicKeyParameters * @return ECPublicKeyParameters
*/ */
public static ECPublicKeyParameters toParams(String xHex, String yHex, ECDomainParameters domainParameters) { public static ECPublicKeyParameters toParams(String xHex, String yHex, ECDomainParameters domainParameters) {
return toParams(HexUtil.decodeHex(xHex), HexUtil.decodeHex(yHex), domainParameters); return ECKeyUtil.toPublicParams(xHex, yHex, domainParameters);
} }
/** /**
@ -260,7 +242,7 @@ public class BCUtil {
* @return ECPublicKeyParameters * @return ECPublicKeyParameters
*/ */
public static ECPublicKeyParameters toSm2Params(byte[] xBytes, byte[] yBytes) { public static ECPublicKeyParameters toSm2Params(byte[] xBytes, byte[] yBytes) {
return toParams(xBytes, yBytes, SmUtil.SM2_DOMAIN_PARAMS); return ECKeyUtil.toSm2PublicParams(xBytes, yBytes);
} }
/** /**

View File

@ -1,5 +1,6 @@
package cn.hutool.crypto; package cn.hutool.crypto;
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import org.bouncycastle.crypto.params.ECDomainParameters; import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters; import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters; import org.bouncycastle.crypto.params.ECPublicKeyParameters;
@ -9,6 +10,7 @@ import org.bouncycastle.util.BigIntegers;
import java.math.BigInteger; import java.math.BigInteger;
import java.security.InvalidKeyException; import java.security.InvalidKeyException;
import java.security.Key;
import java.security.PrivateKey; import java.security.PrivateKey;
import java.security.PublicKey; import java.security.PublicKey;
@ -20,6 +22,22 @@ import java.security.PublicKey;
*/ */
public class ECKeyUtil { public class ECKeyUtil {
/**
* 密钥转换为AsymmetricKeyParameter
*
* @param key PrivateKey或者PublicKey
* @return ECPrivateKeyParameters或者ECPublicKeyParameters
*/
public static AsymmetricKeyParameter toParams(Key key) {
if (key instanceof PrivateKey) {
return toPrivateParams((PrivateKey) key);
} else if (key instanceof PublicKey) {
return toPublicParams((PublicKey) key);
}
return null;
}
//--------------------------------------------------------------------------- Public Key //--------------------------------------------------------------------------- Public Key
/** /**
* 转换为 ECPublicKeyParameters * 转换为 ECPublicKeyParameters