package org.bouncycastle.jcajce.provider.asymmetric.rsa; import java.io.ByteArrayOutputStream; import java.security.AlgorithmParameters; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import java.security.SignatureException; import java.security.SignatureSpi; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.AlgorithmParameterSpec; import java.security.spec.MGF1ParameterSpec; import java.security.spec.PSSParameterSpec; import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; import org.bouncycastle.crypto.AsymmetricBlockCipher; import org.bouncycastle.crypto.CryptoException; import org.bouncycastle.crypto.Digest; import org.bouncycastle.crypto.engines.RSABlindedEngine; import org.bouncycastle.crypto.params.ParametersWithRandom; import org.bouncycastle.crypto.signers.PSSSigner; import org.bouncycastle.jcajce.provider.util.DigestFactory; import org.bouncycastle.jcajce.util.BCJcaJceHelper; import org.bouncycastle.jcajce.util.JcaJceHelper; import org.bouncycastle.pqc.jcajce.spec.McElieceCCA2KeyGenParameterSpec; import org.bouncycastle.pqc.jcajce.spec.SPHINCS256KeyGenParameterSpec; /* loaded from: classes6.dex */ public class PSSSignatureSpi extends SignatureSpi { private Digest contentDigest; private AlgorithmParameters engineParams; private final JcaJceHelper helper; private boolean isRaw; private Digest mgfDigest; private PSSParameterSpec originalSpec; private PSSParameterSpec paramSpec; private PSSSigner pss; private int saltLength; private AsymmetricBlockCipher signer; private byte trailer; @Override // java.security.SignatureSpi protected boolean engineVerify(byte[] bArr) throws SignatureException { return this.pss.verifySignature(bArr); } @Override // java.security.SignatureSpi protected void engineUpdate(byte[] bArr, int i, int i2) throws SignatureException { this.pss.update(bArr, i, i2); } @Override // java.security.SignatureSpi protected void engineUpdate(byte b) throws SignatureException { this.pss.update(b); } @Override // java.security.SignatureSpi protected byte[] engineSign() throws SignatureException { try { return this.pss.generateSignature(); } catch (CryptoException e) { throw new SignatureException(e.getMessage()); } } @Override // java.security.SignatureSpi protected void engineSetParameter(AlgorithmParameterSpec algorithmParameterSpec) throws InvalidAlgorithmParameterException { if (!(algorithmParameterSpec instanceof PSSParameterSpec)) { throw new InvalidAlgorithmParameterException("Only PSSParameterSpec supported"); } PSSParameterSpec pSSParameterSpec = (PSSParameterSpec) algorithmParameterSpec; PSSParameterSpec pSSParameterSpec2 = this.originalSpec; if (pSSParameterSpec2 != null && !DigestFactory.isSameDigest(pSSParameterSpec2.getDigestAlgorithm(), pSSParameterSpec.getDigestAlgorithm())) { StringBuilder sb = new StringBuilder("parameter must be using "); sb.append(this.originalSpec.getDigestAlgorithm()); throw new InvalidAlgorithmParameterException(sb.toString()); } if (!pSSParameterSpec.getMGFAlgorithm().equalsIgnoreCase("MGF1") && !pSSParameterSpec.getMGFAlgorithm().equals(PKCSObjectIdentifiers.id_mgf1.getId())) { throw new InvalidAlgorithmParameterException("unknown mask generation function specified"); } if (!(pSSParameterSpec.getMGFParameters() instanceof MGF1ParameterSpec)) { throw new InvalidAlgorithmParameterException("unknown MGF parameters"); } MGF1ParameterSpec mGF1ParameterSpec = (MGF1ParameterSpec) pSSParameterSpec.getMGFParameters(); if (!DigestFactory.isSameDigest(mGF1ParameterSpec.getDigestAlgorithm(), pSSParameterSpec.getDigestAlgorithm())) { throw new InvalidAlgorithmParameterException("digest algorithm for MGF should be the same as for PSS parameters."); } Digest digest = DigestFactory.getDigest(mGF1ParameterSpec.getDigestAlgorithm()); if (digest == null) { StringBuilder sb2 = new StringBuilder("no match on MGF digest algorithm: "); sb2.append(mGF1ParameterSpec.getDigestAlgorithm()); throw new InvalidAlgorithmParameterException(sb2.toString()); } this.engineParams = null; this.paramSpec = pSSParameterSpec; this.mgfDigest = digest; this.saltLength = pSSParameterSpec.getSaltLength(); this.trailer = getTrailer(this.paramSpec.getTrailerField()); setupContentDigest(); } @Override // java.security.SignatureSpi protected void engineSetParameter(String str, Object obj) { throw new UnsupportedOperationException("engineSetParameter unsupported"); } /* JADX INFO: Access modifiers changed from: package-private */ /* loaded from: classes6.dex */ public class NullPssDigest implements Digest { private Digest baseDigest; final PSSSignatureSpi this$0; private ByteArrayOutputStream bOut = new ByteArrayOutputStream(); private boolean oddTime = true; public int getByteLength() { return 0; } @Override // org.bouncycastle.crypto.Digest public void update(byte[] bArr, int i, int i2) { this.bOut.write(bArr, i, i2); } @Override // org.bouncycastle.crypto.Digest public void update(byte b) { this.bOut.write(b); } @Override // org.bouncycastle.crypto.Digest public void reset() { this.bOut.reset(); this.baseDigest.reset(); } @Override // org.bouncycastle.crypto.Digest public int getDigestSize() { return this.baseDigest.getDigestSize(); } @Override // org.bouncycastle.crypto.Digest public String getAlgorithmName() { return "NULL"; } @Override // org.bouncycastle.crypto.Digest public int doFinal(byte[] bArr, int i) { byte[] byteArray = this.bOut.toByteArray(); if (this.oddTime) { System.arraycopy(byteArray, 0, bArr, i, byteArray.length); } else { this.baseDigest.update(byteArray, 0, byteArray.length); this.baseDigest.doFinal(bArr, i); } reset(); this.oddTime = !this.oddTime; return byteArray.length; } public NullPssDigest(PSSSignatureSpi pSSSignatureSpi, Digest digest) { this.this$0 = pSSSignatureSpi; this.baseDigest = digest; } } @Override // java.security.SignatureSpi protected void engineInitVerify(PublicKey publicKey) throws InvalidKeyException { if (!(publicKey instanceof RSAPublicKey)) { throw new InvalidKeyException("Supplied key is not a RSAPublicKey instance"); } PSSSigner pSSSigner = new PSSSigner(this.signer, this.contentDigest, this.mgfDigest, this.saltLength, this.trailer); this.pss = pSSSigner; pSSSigner.init(false, RSAUtil.generatePublicKeyParameter((RSAPublicKey) publicKey)); } @Override // java.security.SignatureSpi protected void engineInitSign(PrivateKey privateKey, SecureRandom secureRandom) throws InvalidKeyException { if (!(privateKey instanceof RSAPrivateKey)) { throw new InvalidKeyException("Supplied key is not a RSAPrivateKey instance"); } PSSSigner pSSSigner = new PSSSigner(this.signer, this.contentDigest, this.mgfDigest, this.saltLength, this.trailer); this.pss = pSSSigner; pSSSigner.init(true, new ParametersWithRandom(RSAUtil.generatePrivateKeyParameter((RSAPrivateKey) privateKey), secureRandom)); } @Override // java.security.SignatureSpi protected void engineInitSign(PrivateKey privateKey) throws InvalidKeyException { if (!(privateKey instanceof RSAPrivateKey)) { throw new InvalidKeyException("Supplied key is not a RSAPrivateKey instance"); } PSSSigner pSSSigner = new PSSSigner(this.signer, this.contentDigest, this.mgfDigest, this.saltLength, this.trailer); this.pss = pSSSigner; pSSSigner.init(true, RSAUtil.generatePrivateKeyParameter((RSAPrivateKey) privateKey)); } @Override // java.security.SignatureSpi protected AlgorithmParameters engineGetParameters() { if (this.engineParams == null && this.paramSpec != null) { try { AlgorithmParameters createAlgorithmParameters = this.helper.createAlgorithmParameters("PSS"); this.engineParams = createAlgorithmParameters; createAlgorithmParameters.init(this.paramSpec); } catch (Exception e) { throw new RuntimeException(e.toString()); } } return this.engineParams; } @Override // java.security.SignatureSpi protected Object engineGetParameter(String str) { throw new UnsupportedOperationException("engineGetParameter unsupported"); } private void setupContentDigest() { this.contentDigest = this.isRaw ? new NullPssDigest(this, this.mgfDigest) : this.mgfDigest; } private byte getTrailer(int i) { if (i == 1) { return PSSSigner.TRAILER_IMPLICIT; } throw new IllegalArgumentException("unknown trailer field"); } /* loaded from: classes6.dex */ public static class PSSwithRSA extends PSSSignatureSpi { public PSSwithRSA() { super(new RSABlindedEngine(), null); } } /* loaded from: classes6.dex */ public static class SHA1withRSA extends PSSSignatureSpi { public SHA1withRSA() { super(new RSABlindedEngine(), PSSParameterSpec.DEFAULT); } } /* loaded from: classes6.dex */ public static class SHA224withRSA extends PSSSignatureSpi { public SHA224withRSA() { super(new RSABlindedEngine(), new PSSParameterSpec(McElieceCCA2KeyGenParameterSpec.SHA224, "MGF1", new MGF1ParameterSpec(McElieceCCA2KeyGenParameterSpec.SHA224), 28, 1)); } } /* loaded from: classes6.dex */ public static class SHA256withRSA extends PSSSignatureSpi { public SHA256withRSA() { super(new RSABlindedEngine(), new PSSParameterSpec(McElieceCCA2KeyGenParameterSpec.SHA256, "MGF1", new MGF1ParameterSpec(McElieceCCA2KeyGenParameterSpec.SHA256), 32, 1)); } } /* loaded from: classes6.dex */ public static class SHA384withRSA extends PSSSignatureSpi { public SHA384withRSA() { super(new RSABlindedEngine(), new PSSParameterSpec(McElieceCCA2KeyGenParameterSpec.SHA384, "MGF1", new MGF1ParameterSpec(McElieceCCA2KeyGenParameterSpec.SHA384), 48, 1)); } } /* loaded from: classes6.dex */ public static class SHA3_224withRSA extends PSSSignatureSpi { public SHA3_224withRSA() { super(new RSABlindedEngine(), new PSSParameterSpec("SHA3-224", "MGF1", new MGF1ParameterSpec("SHA3-224"), 28, 1)); } } /* loaded from: classes6.dex */ public static class SHA3_256withRSA extends PSSSignatureSpi { public SHA3_256withRSA() { super(new RSABlindedEngine(), new PSSParameterSpec(SPHINCS256KeyGenParameterSpec.SHA3_256, "MGF1", new MGF1ParameterSpec(SPHINCS256KeyGenParameterSpec.SHA3_256), 32, 1)); } } /* loaded from: classes6.dex */ public static class SHA3_384withRSA extends PSSSignatureSpi { public SHA3_384withRSA() { super(new RSABlindedEngine(), new PSSParameterSpec("SHA3-384", "MGF1", new MGF1ParameterSpec("SHA3-384"), 48, 1)); } } /* loaded from: classes6.dex */ public static class SHA3_512withRSA extends PSSSignatureSpi { public SHA3_512withRSA() { super(new RSABlindedEngine(), new PSSParameterSpec("SHA3-512", "MGF1", new MGF1ParameterSpec("SHA3-512"), 64, 1)); } } /* loaded from: classes6.dex */ public static class SHA512_224withRSA extends PSSSignatureSpi { public SHA512_224withRSA() { super(new RSABlindedEngine(), new PSSParameterSpec("SHA-512(224)", "MGF1", new MGF1ParameterSpec("SHA-512(224)"), 28, 1)); } } /* loaded from: classes6.dex */ public static class SHA512_256withRSA extends PSSSignatureSpi { public SHA512_256withRSA() { super(new RSABlindedEngine(), new PSSParameterSpec("SHA-512(256)", "MGF1", new MGF1ParameterSpec("SHA-512(256)"), 32, 1)); } } /* loaded from: classes6.dex */ public static class SHA512withRSA extends PSSSignatureSpi { public SHA512withRSA() { super(new RSABlindedEngine(), new PSSParameterSpec(McElieceCCA2KeyGenParameterSpec.SHA512, "MGF1", new MGF1ParameterSpec(McElieceCCA2KeyGenParameterSpec.SHA512), 64, 1)); } } /* loaded from: classes6.dex */ public static class nonePSS extends PSSSignatureSpi { public nonePSS() { super(new RSABlindedEngine(), null, true); } } protected PSSSignatureSpi(AsymmetricBlockCipher asymmetricBlockCipher, PSSParameterSpec pSSParameterSpec, boolean z) { this.helper = new BCJcaJceHelper(); this.signer = asymmetricBlockCipher; this.originalSpec = pSSParameterSpec; if (pSSParameterSpec == null) { this.paramSpec = PSSParameterSpec.DEFAULT; } else { this.paramSpec = pSSParameterSpec; } this.mgfDigest = DigestFactory.getDigest(this.paramSpec.getDigestAlgorithm()); this.saltLength = this.paramSpec.getSaltLength(); this.trailer = getTrailer(this.paramSpec.getTrailerField()); this.isRaw = z; setupContentDigest(); } protected PSSSignatureSpi(AsymmetricBlockCipher asymmetricBlockCipher, PSSParameterSpec pSSParameterSpec) { this(asymmetricBlockCipher, pSSParameterSpec, false); } }