remove methods

This commit is contained in:
Looly 2023-11-08 16:06:02 +08:00
parent ad7ec3ffaa
commit c210e6be41
4 changed files with 68 additions and 232 deletions

View File

@ -12,12 +12,6 @@
package org.dromara.hutool.crypto.asymmetric;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.codec.HexUtil;
import org.dromara.hutool.crypto.bc.BCUtil;
import org.dromara.hutool.crypto.CryptoException;
import org.dromara.hutool.crypto.bc.ECKeyUtil;
import org.dromara.hutool.crypto.SecureUtil;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.InvalidCipherTextException;
@ -33,6 +27,11 @@ import org.bouncycastle.crypto.signers.SM2Signer;
import org.bouncycastle.crypto.signers.StandardDSAEncoding;
import org.bouncycastle.util.BigIntegers;
import org.bouncycastle.util.encoders.Hex;
import org.dromara.hutool.core.codec.HexUtil;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.crypto.CryptoException;
import org.dromara.hutool.crypto.SecureUtil;
import org.dromara.hutool.crypto.bc.ECKeyUtil;
import org.dromara.hutool.crypto.bc.SmUtil;
import java.math.BigInteger;
@ -104,8 +103,8 @@ public class SM2 extends AbstractAsymmetricCrypto<SM2> {
*/
public SM2(final byte[] privateKey, final byte[] publicKey) {
this(
ECKeyUtil.decodePrivateKeyParams(privateKey),
ECKeyUtil.decodePublicKeyParams(publicKey)
ECKeyUtil.decodePrivateKeyParams(privateKey),
ECKeyUtil.decodePublicKeyParams(publicKey)
);
}
@ -118,7 +117,7 @@ public class SM2 extends AbstractAsymmetricCrypto<SM2> {
* @param publicKey 公钥
*/
public SM2(final PrivateKey privateKey, final PublicKey publicKey) {
this(BCUtil.toParams(privateKey), BCUtil.toParams(publicKey));
this(ECKeyUtil.toPrivateParams(privateKey), ECKeyUtil.toPublicParams(publicKey));
if (null != privateKey) {
this.privateKey = privateKey;
}
@ -132,13 +131,13 @@ public class SM2 extends AbstractAsymmetricCrypto<SM2> {
* 私钥和公钥同时为空时生成一对新的私钥和公钥<br>
* 私钥和公钥可以单独传入一个如此则只能使用此钥匙来做加密或者解密
*
* @param privateKeyHex 私钥16进制
* @param privateKeyDValue 私钥16进制私钥D值
* @param publicKeyPointXHex 公钥X16进制
* @param publicKeyPointYHex 公钥Y16进制
* @since 5.2.0
*/
public SM2(final String privateKeyHex, final String publicKeyPointXHex, final String publicKeyPointYHex) {
this(BCUtil.toSm2Params(privateKeyHex), BCUtil.toSm2Params(publicKeyPointXHex, publicKeyPointYHex));
public SM2(final String privateKeyDValue, final String publicKeyPointXHex, final String publicKeyPointYHex) {
this(ECKeyUtil.toSm2PrivateParams(privateKeyDValue), ECKeyUtil.toSm2PublicParams(publicKeyPointXHex, publicKeyPointYHex));
}
/**
@ -146,13 +145,14 @@ public class SM2 extends AbstractAsymmetricCrypto<SM2> {
* 私钥和公钥同时为空时生成一对新的私钥和公钥<br>
* 私钥和公钥可以单独传入一个如此则只能使用此钥匙来做加密或者解密
*
* @param privateKey 私钥
* @param publicKeyPointX 公钥X
* @param publicKeyPointY 公钥Y
* @param privateKeyDValue 私钥D值
* @param publicKeyPointX 公钥X
* @param publicKeyPointY 公钥Y
* @since 5.2.0
*/
public SM2(final byte[] privateKey, final byte[] publicKeyPointX, final byte[] publicKeyPointY) {
this(BCUtil.toSm2Params(privateKey), BCUtil.toSm2Params(publicKeyPointX, publicKeyPointY));
public SM2(final byte[] privateKeyDValue, final byte[] publicKeyPointX, final byte[] publicKeyPointY) {
this(ECKeyUtil.toSm2PrivateParams(privateKeyDValue),
ECKeyUtil.toSm2PublicParams(publicKeyPointX, publicKeyPointY));
}
/**
@ -182,8 +182,8 @@ public class SM2 extends AbstractAsymmetricCrypto<SM2> {
public SM2 init() {
if (null == this.privateKeyParams && null == this.publicKeyParams) {
super.initKeys();
this.privateKeyParams = BCUtil.toParams(this.privateKey);
this.publicKeyParams = BCUtil.toParams(this.publicKey);
this.privateKeyParams = ECKeyUtil.toPrivateParams(this.privateKey);
this.publicKeyParams = ECKeyUtil.toPublicParams(this.publicKey);
}
return this;
}
@ -206,7 +206,7 @@ public class SM2 extends AbstractAsymmetricCrypto<SM2> {
* C2 密文数据
* </pre>
*
* @param data 被加密的bytes
* @param data 被加密的bytes
* @return 加密后的bytes
* @throws CryptoException 包括InvalidKeyException和InvalidCipherTextException的包装异常
* @since 5.7.10
@ -270,7 +270,7 @@ public class SM2 extends AbstractAsymmetricCrypto<SM2> {
/**
* 使用私钥解密
*
* @param data SM2密文实际包含三部分ECC公钥真正的密文公钥和原文的SM3-HASH值
* @param data SM2密文实际包含三部分ECC公钥真正的密文公钥和原文的SM3-HASH值
* @return 加密后的bytes
* @throws CryptoException 包括InvalidKeyException和InvalidCipherTextException的包装异常
* @since 5.7.10
@ -441,7 +441,7 @@ public class SM2 extends AbstractAsymmetricCrypto<SM2> {
super.setPrivateKey(privateKey);
// 重新初始化密钥参数防止重新设置密钥时导致密钥无法更新
this.privateKeyParams = BCUtil.toParams(privateKey);
this.privateKeyParams = ECKeyUtil.toPrivateParams(privateKey);
return this;
}
@ -463,7 +463,7 @@ public class SM2 extends AbstractAsymmetricCrypto<SM2> {
super.setPublicKey(publicKey);
// 重新初始化密钥参数防止重新设置密钥时导致密钥无法更新
this.publicKeyParams = BCUtil.toParams(publicKey);
this.publicKeyParams = ECKeyUtil.toPublicParams(publicKey);
return this;
}
@ -535,7 +535,7 @@ public class SM2 extends AbstractAsymmetricCrypto<SM2> {
* @since 5.5.9
*/
public byte[] getD() {
return BigIntegers.asUnsignedByteArray(32,getDBigInteger());
return BigIntegers.asUnsignedByteArray(32, getDBigInteger());
}
/**

View File

@ -12,14 +12,10 @@
package org.dromara.hutool.crypto.bc;
import org.dromara.hutool.core.io.IORuntimeException;
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey;
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;
import org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util;
@ -27,12 +23,11 @@ import org.bouncycastle.jcajce.provider.asymmetric.util.ECUtil;
import org.bouncycastle.jce.spec.ECNamedCurveSpec;
import org.bouncycastle.jce.spec.ECParameterSpec;
import org.bouncycastle.math.ec.ECCurve;
import org.dromara.hutool.crypto.*;
import org.dromara.hutool.core.io.IORuntimeException;
import org.dromara.hutool.crypto.KeyUtil;
import org.dromara.hutool.crypto.SecureUtil;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.Key;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.ECPoint;
@ -155,182 +150,6 @@ public class BCUtil {
);
}
/**
* 密钥转换为AsymmetricKeyParameter
*
* @param key PrivateKey或者PublicKey
* @return ECPrivateKeyParameters或者ECPublicKeyParameters
* @since 5.2.0
*/
public static AsymmetricKeyParameter toParams(final Key key) {
return ECKeyUtil.toParams(key);
}
/**
* 转换为 ECPrivateKeyParameters
*
* @param d 私钥d值
* @return ECPrivateKeyParameters
*/
public static ECPrivateKeyParameters toSm2Params(final String d) {
return ECKeyUtil.toSm2PrivateParams(d);
}
/**
* 转换为 ECPrivateKeyParameters
*
* @param dHex 私钥d值16进制字符串
* @param domainParameters ECDomainParameters
* @return ECPrivateKeyParameters
*/
public static ECPrivateKeyParameters toParams(final String dHex, final ECDomainParameters domainParameters) {
return ECKeyUtil.toPrivateParams(dHex, domainParameters);
}
/**
* 转换为 ECPrivateKeyParameters
*
* @param d 私钥d值
* @return ECPrivateKeyParameters
*/
public static ECPrivateKeyParameters toSm2Params(final byte[] d) {
return ECKeyUtil.toSm2PrivateParams(d);
}
/**
* 转换为 ECPrivateKeyParameters
*
* @param d 私钥d值
* @param domainParameters ECDomainParameters
* @return ECPrivateKeyParameters
*/
public static ECPrivateKeyParameters toParams(final byte[] d, final ECDomainParameters domainParameters) {
return ECKeyUtil.toPrivateParams(d, domainParameters);
}
/**
* 转换为 ECPrivateKeyParameters
*
* @param d 私钥d值
* @return ECPrivateKeyParameters
*/
public static ECPrivateKeyParameters toSm2Params(final BigInteger d) {
return ECKeyUtil.toSm2PrivateParams(d);
}
/**
* 转换为 ECPrivateKeyParameters
*
* @param d 私钥d值
* @param domainParameters ECDomainParameters
* @return ECPrivateKeyParameters
*/
public static ECPrivateKeyParameters toParams(final BigInteger d, final ECDomainParameters domainParameters) {
return ECKeyUtil.toPrivateParams(d, domainParameters);
}
/**
* 转换为ECPublicKeyParameters
*
* @param x 公钥X
* @param y 公钥Y
* @param domainParameters ECDomainParameters
* @return ECPublicKeyParameters
*/
public static ECPublicKeyParameters toParams(final BigInteger x, final BigInteger y, final ECDomainParameters domainParameters) {
return ECKeyUtil.toPublicParams(x, y, domainParameters);
}
/**
* 转换为SM2的ECPublicKeyParameters
*
* @param xHex 公钥X
* @param yHex 公钥Y
* @return ECPublicKeyParameters
*/
public static ECPublicKeyParameters toSm2Params(final String xHex, final String yHex) {
return ECKeyUtil.toSm2PublicParams(xHex, yHex);
}
/**
* 转换为ECPublicKeyParameters
*
* @param xHex 公钥X
* @param yHex 公钥Y
* @param domainParameters ECDomainParameters
* @return ECPublicKeyParameters
*/
public static ECPublicKeyParameters toParams(final String xHex, final String yHex, final ECDomainParameters domainParameters) {
return ECKeyUtil.toPublicParams(xHex, yHex, domainParameters);
}
/**
* 转换为SM2的ECPublicKeyParameters
*
* @param xBytes 公钥X
* @param yBytes 公钥Y
* @return ECPublicKeyParameters
*/
public static ECPublicKeyParameters toSm2Params(final byte[] xBytes, final byte[] yBytes) {
return ECKeyUtil.toSm2PublicParams(xBytes, yBytes);
}
/**
* 转换为ECPublicKeyParameters
*
* @param xBytes 公钥X
* @param yBytes 公钥Y
* @param domainParameters ECDomainParameters
* @return ECPublicKeyParameters
*/
public static ECPublicKeyParameters toParams(final byte[] xBytes, final byte[] yBytes, final ECDomainParameters domainParameters) {
return ECKeyUtil.toPublicParams(xBytes, yBytes, domainParameters);
}
/**
* 公钥转换为 {@link ECPublicKeyParameters}
*
* @param publicKey 公钥传入null返回null
* @return {@link ECPublicKeyParameters}或null
*/
public static ECPublicKeyParameters toParams(final PublicKey publicKey) {
return ECKeyUtil.toPublicParams(publicKey);
}
/**
* 私钥转换为 {@link ECPrivateKeyParameters}
*
* @param privateKey 私钥传入null返回null
* @return {@link ECPrivateKeyParameters}或null
*/
public static ECPrivateKeyParameters toParams(final PrivateKey privateKey) {
return ECKeyUtil.toPrivateParams(privateKey);
}
/**
* 读取PEM格式的私钥
*
* @param pemStream pem流
* @return {@link PrivateKey}
* @since 5.2.5
* @see PemUtil#readPemPrivateKey(InputStream)
*/
public static PrivateKey readPemPrivateKey(final InputStream pemStream) {
return PemUtil.readPemPrivateKey(pemStream);
}
/**
* 读取PEM格式的公钥
*
* @param pemStream pem流
* @return {@link PublicKey}
* @since 5.2.5
* @see PemUtil#readPemPublicKey(InputStream)
*/
public static PublicKey readPemPublicKey(final InputStream pemStream) {
return PemUtil.readPemPublicKey(pemStream);
}
/**
* Java中的PKCS#8格式私钥转换为OpenSSL支持的PKCS#1格式
*

View File

@ -12,30 +12,6 @@
package org.dromara.hutool.crypto.bc;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class BCUtilTest {
/**
* 密钥生成来自<a href="https://i.goto327.top/CryptTools/SM2.aspx?tdsourcetag=s_pctim_aiomsg">...</a>
*/
@Test
public void createECPublicKeyParametersTest() {
final String x = "706AD9DAA3E5CEAC3DA59F583429E8043BAFC576BE10092C4EA4D8E19846CA62";
final String y = "F7E938B02EED7280277493B8556E5B01CB436E018A562DFDC53342BF41FDF728";
final ECPublicKeyParameters keyParameters = BCUtil.toSm2Params(x, y);
Assertions.assertNotNull(keyParameters);
}
@Test
public void createECPrivateKeyParametersTest() {
final String privateKeyHex = "5F6CA5BB044C40ED2355F0372BF72A5B3AE6943712F9FDB7C1FFBAECC06F3829";
final ECPrivateKeyParameters keyParameters = BCUtil.toSm2Params(privateKeyHex);
Assertions.assertNotNull(keyParameters);
}
}

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2023. looly(loolly@aliyun.com)
* Hutool is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* https://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.crypto.bc;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class ECKeyUtilTest {
/**
* 密钥生成来自<a href="https://i.goto327.top/CryptTools/SM2.aspx?tdsourcetag=s_pctim_aiomsg">...</a>
*/
@Test
public void createECPublicKeyParametersTest() {
final String x = "706AD9DAA3E5CEAC3DA59F583429E8043BAFC576BE10092C4EA4D8E19846CA62";
final String y = "F7E938B02EED7280277493B8556E5B01CB436E018A562DFDC53342BF41FDF728";
final ECPublicKeyParameters keyParameters = ECKeyUtil.toSm2PublicParams(x, y);
Assertions.assertNotNull(keyParameters);
}
@Test
public void createECPrivateKeyParametersTest() {
final String privateKeyHex = "5F6CA5BB044C40ED2355F0372BF72A5B3AE6943712F9FDB7C1FFBAECC06F3829";
final ECPrivateKeyParameters keyParameters = ECKeyUtil.toSm2PrivateParams(privateKeyHex);
Assertions.assertNotNull(keyParameters);
}
}