Spermatid v6.1.8版本的 MD5 值为:a375ce51a42d528ba6e2583c10478296
以下内容为反编译后的 Sign.java 源代码,内容仅作参考
package cn.hutool.crypto.asymmetric;
import a1.d;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.crypto.CryptoException;
import h1.j;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.security.spec.AlgorithmParameterSpec;
import java.util.Set;
public class Sign extends BaseAsymmetric<Sign> {
private static final long serialVersionUID = 1;
public Signature signature;
public Sign(SignAlgorithm signAlgorithm) {
this(signAlgorithm, (byte[]) null, (byte[]) null);
}
public String digestHex(InputStream inputStream, int i10) {
return j.e(sign(inputStream, i10));
}
public Signature getSignature() {
return this.signature;
}
public Sign setCertificate(Certificate certificate) {
boolean[] keyUsage;
if (certificate instanceof X509Certificate) {
X509Certificate x509Certificate = (X509Certificate) certificate;
Set<String> criticalExtensionOIDs = x509Certificate.getCriticalExtensionOIDs();
if (CollUtil.m(criticalExtensionOIDs) && criticalExtensionOIDs.contains("2.5.29.15") && (keyUsage = x509Certificate.getKeyUsage()) != null && !keyUsage[0]) {
throw new CryptoException("Wrong key usage");
}
}
this.publicKey = certificate.getPublicKey();
return this;
}
public Sign setParameter(AlgorithmParameterSpec algorithmParameterSpec) {
try {
this.signature.setParameter(algorithmParameterSpec);
return this;
} catch (InvalidAlgorithmParameterException e10) {
throw new CryptoException(e10);
}
}
public Sign setSignature(Signature signature) {
this.signature = signature;
return this;
}
public byte[] sign(String str, Charset charset) {
return sign(d.h(str, charset));
}
public String signHex(String str, Charset charset) {
return j.e(sign(str, charset));
}
public boolean verify(byte[] bArr, byte[] bArr2) {
this.lock.lock();
try {
try {
this.signature.initVerify(this.publicKey);
this.signature.update(bArr);
return this.signature.verify(bArr2);
} catch (Exception e10) {
throw new CryptoException(e10);
}
} finally {
this.lock.unlock();
}
}
public Sign(String str) {
this(str, (byte[]) null, (byte[]) null);
}
@Override
public Sign init(String str, PrivateKey privateKey, PublicKey publicKey) {
this.signature = o1.b.d(str);
super.init(str, privateKey, publicKey);
return this;
}
public byte[] sign(String str) {
return sign(str, cn.hutool.core.util.c.f4171c);
}
public String signHex(String str) {
return signHex(str, cn.hutool.core.util.c.f4171c);
}
public Sign(SignAlgorithm signAlgorithm, String str, String str2) {
this(signAlgorithm.getValue(), o1.b.e(str), o1.b.e(str2));
}
public byte[] sign(byte[] bArr) {
return sign(new ByteArrayInputStream(bArr), -1);
}
public String signHex(byte[] bArr) {
return j.e(sign(bArr));
}
public Sign(SignAlgorithm signAlgorithm, byte[] bArr, byte[] bArr2) {
this(signAlgorithm.getValue(), bArr, bArr2);
}
public byte[] sign(InputStream inputStream) {
return sign(inputStream, 8192);
}
public String signHex(InputStream inputStream) {
return j.e(sign(inputStream));
}
public Sign(SignAlgorithm signAlgorithm, KeyPair keyPair) {
this(signAlgorithm.getValue(), keyPair);
}
public byte[] sign(InputStream inputStream, int i10) {
if (i10 < 1) {
i10 = 8192;
}
byte[] bArr = new byte[i10];
this.lock.lock();
try {
try {
this.signature.initSign(this.privateKey);
try {
int read = inputStream.read(bArr, 0, i10);
while (read > -1) {
this.signature.update(bArr, 0, read);
read = inputStream.read(bArr, 0, i10);
}
return this.signature.sign();
} catch (Exception e10) {
throw new CryptoException(e10);
}
} catch (Exception e11) {
throw new CryptoException(e11);
}
} finally {
this.lock.unlock();
}
}
public Sign(SignAlgorithm signAlgorithm, PrivateKey privateKey, PublicKey publicKey) {
this(signAlgorithm.getValue(), privateKey, publicKey);
}
public Sign(String str, String str2, String str3) {
this(str, s.c.a(str2), s.c.a(str3));
}
public Sign(String str, byte[] bArr, byte[] bArr2) {
this(str, o1.b.i(str, bArr), o1.b.k(str, bArr2));
}
public Sign(String str, KeyPair keyPair) {
this(str, keyPair.getPrivate(), keyPair.getPublic());
}
public Sign(String str, PrivateKey privateKey, PublicKey publicKey) {
super(str, privateKey, publicKey);
}
}