mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
fix sm2 bugs
This commit is contained in:
@@ -41,15 +41,28 @@ public class BCUtil {
|
||||
}
|
||||
|
||||
/**
|
||||
* 编码压缩EC公钥(基于BouncyCastle)<br>
|
||||
* 编码压缩EC公钥(基于BouncyCastle),即Q值<br>
|
||||
* 见:https://www.cnblogs.com/xinzhao/p/8963724.html
|
||||
*
|
||||
* @param publicKey {@link PublicKey},必须为org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey
|
||||
* @return 压缩得到的X
|
||||
* @return 压缩得到的Q
|
||||
* @since 4.4.4
|
||||
*/
|
||||
public static byte[] encodeECPublicKey(PublicKey publicKey) {
|
||||
return ((BCECPublicKey) publicKey).getQ().getEncoded(true);
|
||||
return encodeECPublicKey(publicKey, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编码压缩EC公钥(基于BouncyCastle),即Q值<br>
|
||||
* 见:https://www.cnblogs.com/xinzhao/p/8963724.html
|
||||
*
|
||||
* @param publicKey {@link PublicKey},必须为org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey
|
||||
* @param isCompressed 是否压缩
|
||||
* @return 得到的Q
|
||||
* @since 5.5.9
|
||||
*/
|
||||
public static byte[] encodeECPublicKey(PublicKey publicKey, boolean isCompressed) {
|
||||
return ((BCECPublicKey) publicKey).getQ().getEncoded(isCompressed);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -87,7 +87,7 @@ public class ECKeyUtil {
|
||||
* @param x 公钥X
|
||||
* @param y 公钥Y
|
||||
* @param domainParameters ECDomainParameters
|
||||
* @return ECPublicKeyParameters
|
||||
* @return ECPublicKeyParameters,x或y为{@code null}则返回{@code null}
|
||||
*/
|
||||
public static ECPublicKeyParameters toPublicParams(String x, String y, ECDomainParameters domainParameters) {
|
||||
return toPublicParams(SecureUtil.decode(x), SecureUtil.decode(y), domainParameters);
|
||||
@@ -102,6 +102,9 @@ public class ECKeyUtil {
|
||||
* @return ECPublicKeyParameters
|
||||
*/
|
||||
public static ECPublicKeyParameters toPublicParams(byte[] xBytes, byte[] yBytes, ECDomainParameters domainParameters) {
|
||||
if(null == xBytes || null == yBytes){
|
||||
return null;
|
||||
}
|
||||
return toPublicParams(BigIntegers.fromUnsignedByteArray(xBytes), BigIntegers.fromUnsignedByteArray(yBytes), domainParameters);
|
||||
}
|
||||
|
||||
|
@@ -26,7 +26,7 @@ import java.math.BigInteger;
|
||||
|
||||
/**
|
||||
* SM国密算法工具类<br>
|
||||
* 此工具类依赖org.bouncycastle:bcpkix-jdk15on
|
||||
* 此工具类依赖org.bouncycastle:bcprov-jdk15to18
|
||||
*
|
||||
* @author looly
|
||||
* @since 4.3.2
|
||||
|
@@ -471,6 +471,27 @@ public class SM2 extends AbstractAsymmetricCrypto<SM2> {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得私钥D值(编码后的私钥)
|
||||
*
|
||||
* @return D值
|
||||
* @since 5.5.9
|
||||
*/
|
||||
public byte[] getD() {
|
||||
return this.privateKeyParams.getD().toByteArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得公钥Q值(编码后的公钥)
|
||||
*
|
||||
* @param isCompressed 是否压缩
|
||||
* @return Q值
|
||||
* @since 5.5.9
|
||||
*/
|
||||
public byte[] getQ(boolean isCompressed) {
|
||||
return this.publicKeyParams.getQ().getEncoded(isCompressed);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------------------------- Private method start
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user