package org.bouncycastle.jcajce.provider.asymmetric.rsa; import java.io.IOException; import java.security.AlgorithmParameters; import java.security.InvalidKeyException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SignatureException; import java.security.SignatureSpi; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.AlgorithmParameterSpec; import org.bouncycastle.asn1.ASN1Encoding; import org.bouncycastle.asn1.ASN1ObjectIdentifier; import org.bouncycastle.asn1.DERNull; import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; import org.bouncycastle.asn1.x509.AlgorithmIdentifier; import org.bouncycastle.asn1.x509.DigestInfo; import org.bouncycastle.crypto.AsymmetricBlockCipher; import org.bouncycastle.crypto.Digest; import org.bouncycastle.crypto.digests.MD2Digest; import org.bouncycastle.crypto.digests.MD4Digest; import org.bouncycastle.crypto.digests.MD5Digest; import org.bouncycastle.crypto.digests.NullDigest; import org.bouncycastle.crypto.digests.RIPEMD128Digest; import org.bouncycastle.crypto.digests.RIPEMD160Digest; import org.bouncycastle.crypto.digests.RIPEMD256Digest; import org.bouncycastle.crypto.digests.SHA1Digest; import org.bouncycastle.crypto.digests.SHA224Digest; import org.bouncycastle.crypto.digests.SHA256Digest; import org.bouncycastle.crypto.digests.SHA384Digest; import org.bouncycastle.crypto.digests.SHA3Digest; import org.bouncycastle.crypto.digests.SHA512Digest; import org.bouncycastle.crypto.digests.SHA512tDigest; import org.bouncycastle.crypto.encodings.PKCS1Encoding; import org.bouncycastle.crypto.engines.RSABlindedEngine; import org.bouncycastle.crypto.params.RSAKeyParameters; import org.bouncycastle.util.Arrays; import org.jmrtd.PassportService; /* loaded from: classes6.dex */ public class DigestSignatureSpi extends SignatureSpi { private AlgorithmIdentifier algId; private AsymmetricBlockCipher cipher; private Digest digest; @Override // java.security.SignatureSpi protected Object engineGetParameter(String str) { return null; } @Override // java.security.SignatureSpi protected AlgorithmParameters engineGetParameters() { return null; } @Override // java.security.SignatureSpi protected boolean engineVerify(byte[] bArr) throws SignatureException { byte[] processBlock; byte[] derEncode; int digestSize = this.digest.getDigestSize(); byte[] bArr2 = new byte[digestSize]; this.digest.doFinal(bArr2, 0); try { processBlock = this.cipher.processBlock(bArr, 0, bArr.length); derEncode = derEncode(bArr2); } catch (Exception unused) { } if (processBlock.length == derEncode.length) { return Arrays.constantTimeAreEqual(processBlock, derEncode); } if (processBlock.length != derEncode.length - 2) { Arrays.constantTimeAreEqual(derEncode, derEncode); return false; } int length = (processBlock.length - digestSize) - 2; int length2 = derEncode.length; derEncode[1] = (byte) (derEncode[1] - 2); derEncode[3] = (byte) (derEncode[3] - 2); int i = 0; for (int i2 = 0; i2 < digestSize; i2++) { i |= processBlock[length + i2] ^ derEncode[((length2 - digestSize) - 2) + i2]; } for (int i3 = 0; i3 < length; i3++) { i |= processBlock[i3] ^ derEncode[i3]; } return i == 0; } @Override // java.security.SignatureSpi protected void engineUpdate(byte[] bArr, int i, int i2) throws SignatureException { this.digest.update(bArr, i, i2); } @Override // java.security.SignatureSpi protected void engineUpdate(byte b) throws SignatureException { this.digest.update(b); } @Override // java.security.SignatureSpi protected byte[] engineSign() throws SignatureException { byte[] bArr = new byte[this.digest.getDigestSize()]; this.digest.doFinal(bArr, 0); try { byte[] derEncode = derEncode(bArr); return this.cipher.processBlock(derEncode, 0, derEncode.length); } catch (ArrayIndexOutOfBoundsException unused) { throw new SignatureException("key too small for signature type"); } catch (Exception e) { throw new SignatureException(e.toString()); } } @Override // java.security.SignatureSpi protected void engineSetParameter(AlgorithmParameterSpec algorithmParameterSpec) { throw new UnsupportedOperationException("engineSetParameter unsupported"); } @Override // java.security.SignatureSpi protected void engineSetParameter(String str, Object obj) { throw new UnsupportedOperationException("engineSetParameter unsupported"); } @Override // java.security.SignatureSpi protected void engineInitVerify(PublicKey publicKey) throws InvalidKeyException { if (publicKey instanceof RSAPublicKey) { RSAKeyParameters generatePublicKeyParameter = RSAUtil.generatePublicKeyParameter((RSAPublicKey) publicKey); this.digest.reset(); this.cipher.init(false, generatePublicKeyParameter); } else { StringBuilder sb = new StringBuilder("Supplied key ("); sb.append(getType(publicKey)); sb.append(") is not a RSAPublicKey instance"); throw new InvalidKeyException(sb.toString()); } } @Override // java.security.SignatureSpi protected void engineInitSign(PrivateKey privateKey) throws InvalidKeyException { if (privateKey instanceof RSAPrivateKey) { RSAKeyParameters generatePrivateKeyParameter = RSAUtil.generatePrivateKeyParameter((RSAPrivateKey) privateKey); this.digest.reset(); this.cipher.init(true, generatePrivateKeyParameter); } else { StringBuilder sb = new StringBuilder("Supplied key ("); sb.append(getType(privateKey)); sb.append(") is not a RSAPrivateKey instance"); throw new InvalidKeyException(sb.toString()); } } private String getType(Object obj) { if (obj == null) { return null; } return obj.getClass().getName(); } private byte[] derEncode(byte[] bArr) throws IOException { AlgorithmIdentifier algorithmIdentifier = this.algId; return algorithmIdentifier == null ? bArr : new DigestInfo(algorithmIdentifier, bArr).getEncoded(ASN1Encoding.DER); } /* loaded from: classes6.dex */ public static class MD2 extends DigestSignatureSpi { public MD2() { super(PKCSObjectIdentifiers.md2, new MD2Digest(), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class MD4 extends DigestSignatureSpi { public MD4() { super(PKCSObjectIdentifiers.md4, new MD4Digest(), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class MD5 extends DigestSignatureSpi { public MD5() { super(PKCSObjectIdentifiers.md5, new MD5Digest(), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class RIPEMD128 extends DigestSignatureSpi { public RIPEMD128() { super(TeleTrusTObjectIdentifiers.ripemd128, new RIPEMD128Digest(), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class RIPEMD160 extends DigestSignatureSpi { public RIPEMD160() { super(TeleTrusTObjectIdentifiers.ripemd160, new RIPEMD160Digest(), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class RIPEMD256 extends DigestSignatureSpi { public RIPEMD256() { super(TeleTrusTObjectIdentifiers.ripemd256, new RIPEMD256Digest(), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class SHA1 extends DigestSignatureSpi { public SHA1() { super(OIWObjectIdentifiers.idSHA1, new SHA1Digest(), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class SHA224 extends DigestSignatureSpi { public SHA224() { super(NISTObjectIdentifiers.id_sha224, new SHA224Digest(), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class SHA256 extends DigestSignatureSpi { public SHA256() { super(NISTObjectIdentifiers.id_sha256, new SHA256Digest(), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class SHA384 extends DigestSignatureSpi { public SHA384() { super(NISTObjectIdentifiers.id_sha384, new SHA384Digest(), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class SHA3_224 extends DigestSignatureSpi { public SHA3_224() { super(NISTObjectIdentifiers.id_sha3_224, new SHA3Digest(PassportService.DEFAULT_MAX_BLOCKSIZE), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class SHA3_256 extends DigestSignatureSpi { public SHA3_256() { super(NISTObjectIdentifiers.id_sha3_256, new SHA3Digest(256), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class SHA3_384 extends DigestSignatureSpi { public SHA3_384() { super(NISTObjectIdentifiers.id_sha3_384, new SHA3Digest(384), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class SHA3_512 extends DigestSignatureSpi { public SHA3_512() { super(NISTObjectIdentifiers.id_sha3_512, new SHA3Digest(512), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class SHA512 extends DigestSignatureSpi { public SHA512() { super(NISTObjectIdentifiers.id_sha512, new SHA512Digest(), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class SHA512_224 extends DigestSignatureSpi { public SHA512_224() { super(NISTObjectIdentifiers.id_sha512_224, new SHA512tDigest(PassportService.DEFAULT_MAX_BLOCKSIZE), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class SHA512_256 extends DigestSignatureSpi { public SHA512_256() { super(NISTObjectIdentifiers.id_sha512_256, new SHA512tDigest(256), new PKCS1Encoding(new RSABlindedEngine())); } } /* loaded from: classes6.dex */ public static class noneRSA extends DigestSignatureSpi { public noneRSA() { super(new NullDigest(), new PKCS1Encoding(new RSABlindedEngine())); } } protected DigestSignatureSpi(Digest digest, AsymmetricBlockCipher asymmetricBlockCipher) { this.digest = digest; this.cipher = asymmetricBlockCipher; this.algId = null; } protected DigestSignatureSpi(ASN1ObjectIdentifier aSN1ObjectIdentifier, Digest digest, AsymmetricBlockCipher asymmetricBlockCipher) { this.digest = digest; this.cipher = asymmetricBlockCipher; this.algId = new AlgorithmIdentifier(aSN1ObjectIdentifier, DERNull.INSTANCE); } }