package org.bouncycastle.crypto.tls; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Vector; import org.bouncycastle.crypto.params.AsymmetricKeyParameter; import org.bouncycastle.crypto.params.ECPrivateKeyParameters; import org.bouncycastle.crypto.params.ECPublicKeyParameters; import org.bouncycastle.crypto.util.PublicKeyFactory; /* loaded from: classes6.dex */ public class TlsECDHKeyExchange extends AbstractTlsKeyExchange { protected TlsAgreementCredentials agreementCredentials; protected short[] clientECPointFormats; protected ECPrivateKeyParameters ecAgreePrivateKey; protected ECPublicKeyParameters ecAgreePublicKey; protected int[] namedCurves; protected short[] serverECPointFormats; protected AsymmetricKeyParameter serverPublicKey; protected TlsSigner tlsSigner; @Override // org.bouncycastle.crypto.tls.TlsKeyExchange public void validateCertificateRequest(CertificateRequest certificateRequest) throws IOException { for (short s : certificateRequest.getCertificateTypes()) { if (s != 1 && s != 2) { switch (s) { case 64: case 65: case 66: break; default: throw new TlsFatalAlert((short) 47); } } } } @Override // org.bouncycastle.crypto.tls.TlsKeyExchange public void skipServerCredentials() throws IOException { if (this.keyExchange != 20) { throw new TlsFatalAlert((short) 10); } } @Override // org.bouncycastle.crypto.tls.AbstractTlsKeyExchange, org.bouncycastle.crypto.tls.TlsKeyExchange public boolean requiresServerKeyExchange() { int i = this.keyExchange; return i == 17 || i == 19 || i == 20; } @Override // org.bouncycastle.crypto.tls.AbstractTlsKeyExchange, org.bouncycastle.crypto.tls.TlsKeyExchange public void processServerKeyExchange(InputStream inputStream) throws IOException { if (!requiresServerKeyExchange()) { throw new TlsFatalAlert((short) 10); } this.ecAgreePublicKey = TlsECCUtils.validateECPublicKey(TlsECCUtils.deserializeECPublicKey(this.clientECPointFormats, TlsECCUtils.readECParameters(this.namedCurves, this.clientECPointFormats, inputStream), TlsUtils.readOpaque8(inputStream))); } @Override // org.bouncycastle.crypto.tls.AbstractTlsKeyExchange, org.bouncycastle.crypto.tls.TlsKeyExchange public void processServerCertificate(Certificate certificate) throws IOException { int i; if (this.keyExchange == 20) { throw new TlsFatalAlert((short) 10); } if (certificate.isEmpty()) { throw new TlsFatalAlert((short) 42); } org.bouncycastle.asn1.x509.Certificate certificateAt = certificate.getCertificateAt(0); try { AsymmetricKeyParameter createKey = PublicKeyFactory.createKey(certificateAt.getSubjectPublicKeyInfo()); this.serverPublicKey = createKey; TlsSigner tlsSigner = this.tlsSigner; if (tlsSigner == null) { try { this.ecAgreePublicKey = TlsECCUtils.validateECPublicKey((ECPublicKeyParameters) createKey); i = 8; } catch (ClassCastException e) { throw new TlsFatalAlert((short) 46, e); } } else { if (!tlsSigner.isValidPublicKey(createKey)) { throw new TlsFatalAlert((short) 46); } i = 128; } TlsUtils.validateKeyUsage(certificateAt, i); super.processServerCertificate(certificate); } catch (RuntimeException e2) { throw new TlsFatalAlert((short) 43, e2); } } @Override // org.bouncycastle.crypto.tls.AbstractTlsKeyExchange, org.bouncycastle.crypto.tls.TlsKeyExchange public void processClientKeyExchange(InputStream inputStream) throws IOException { if (this.ecAgreePublicKey != null) { return; } byte[] readOpaque8 = TlsUtils.readOpaque8(inputStream); this.ecAgreePublicKey = TlsECCUtils.validateECPublicKey(TlsECCUtils.deserializeECPublicKey(this.serverECPointFormats, this.ecAgreePrivateKey.getParameters(), readOpaque8)); } @Override // org.bouncycastle.crypto.tls.TlsKeyExchange public void processClientCredentials(TlsCredentials tlsCredentials) throws IOException { if (this.keyExchange == 20) { throw new TlsFatalAlert((short) 80); } if (tlsCredentials instanceof TlsAgreementCredentials) { this.agreementCredentials = (TlsAgreementCredentials) tlsCredentials; } else if (!(tlsCredentials instanceof TlsSignerCredentials)) { throw new TlsFatalAlert((short) 80); } } @Override // org.bouncycastle.crypto.tls.AbstractTlsKeyExchange, org.bouncycastle.crypto.tls.TlsKeyExchange public void processClientCertificate(Certificate certificate) throws IOException { if (this.keyExchange == 20) { throw new TlsFatalAlert((short) 10); } } @Override // org.bouncycastle.crypto.tls.AbstractTlsKeyExchange, org.bouncycastle.crypto.tls.TlsKeyExchange public void init(TlsContext tlsContext) { super.init(tlsContext); TlsSigner tlsSigner = this.tlsSigner; if (tlsSigner != null) { tlsSigner.init(tlsContext); } } @Override // org.bouncycastle.crypto.tls.AbstractTlsKeyExchange, org.bouncycastle.crypto.tls.TlsKeyExchange public byte[] generateServerKeyExchange() throws IOException { if (!requiresServerKeyExchange()) { return null; } ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); this.ecAgreePrivateKey = TlsECCUtils.generateEphemeralServerKeyExchange(this.context.getSecureRandom(), this.namedCurves, this.clientECPointFormats, byteArrayOutputStream); return byteArrayOutputStream.toByteArray(); } @Override // org.bouncycastle.crypto.tls.TlsKeyExchange public byte[] generatePremasterSecret() throws IOException { TlsAgreementCredentials tlsAgreementCredentials = this.agreementCredentials; if (tlsAgreementCredentials != null) { return tlsAgreementCredentials.generateAgreement(this.ecAgreePublicKey); } ECPrivateKeyParameters eCPrivateKeyParameters = this.ecAgreePrivateKey; if (eCPrivateKeyParameters != null) { return TlsECCUtils.calculateECDHBasicAgreement(this.ecAgreePublicKey, eCPrivateKeyParameters); } throw new TlsFatalAlert((short) 80); } @Override // org.bouncycastle.crypto.tls.TlsKeyExchange public void generateClientKeyExchange(OutputStream outputStream) throws IOException { if (this.agreementCredentials == null) { this.ecAgreePrivateKey = TlsECCUtils.generateEphemeralClientKeyExchange(this.context.getSecureRandom(), this.serverECPointFormats, this.ecAgreePublicKey.getParameters(), outputStream); } } public TlsECDHKeyExchange(int i, Vector vector, int[] iArr, short[] sArr, short[] sArr2) { super(i, vector); TlsSigner tlsSigner; switch (i) { case 16: case 18: case 20: tlsSigner = null; break; case 17: tlsSigner = new TlsECDSASigner(); break; case 19: tlsSigner = new TlsRSASigner(); break; default: throw new IllegalArgumentException("unsupported key exchange algorithm"); } this.tlsSigner = tlsSigner; this.namedCurves = iArr; this.clientECPointFormats = sArr; this.serverECPointFormats = sArr2; } }