fix sm2 bugs

This commit is contained in:
Looly
2021-02-19 17:41:49 +08:00
parent 49452c76d8
commit 3bc5054a9a
7 changed files with 82 additions and 12 deletions

View File

@@ -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);
}
/**

View File

@@ -87,7 +87,7 @@ public class ECKeyUtil {
* @param x 公钥X
* @param y 公钥Y
* @param domainParameters ECDomainParameters
* @return ECPublicKeyParameters
* @return ECPublicKeyParametersx或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);
}

View File

@@ -26,7 +26,7 @@ import java.math.BigInteger;
/**
* SM国密算法工具类<br>
* 此工具类依赖org.bouncycastle:bcpkix-jdk15on
* 此工具类依赖org.bouncycastle:bcprov-jdk15to18
*
* @author looly
* @since 4.3.2

View File

@@ -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
/**