package com.google.android.gms.internal.p002firebaseauthapi; import java.math.BigInteger; import java.security.GeneralSecurityException; import java.security.InvalidAlgorithmParameterException; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PublicKey; import java.security.interfaces.ECPrivateKey; import java.security.interfaces.ECPublicKey; import java.security.spec.ECParameterSpec; import java.security.spec.ECPoint; import java.security.spec.ECPrivateKeySpec; import java.security.spec.ECPublicKeySpec; import java.security.spec.EllipticCurve; import java.util.Arrays; import javax.crypto.KeyAgreement; /* loaded from: classes.dex */ public final class zzvg { public static int zza(EllipticCurve ellipticCurve) { return (zzjz.zza(ellipticCurve).subtract(BigInteger.ONE).bitLength() + 7) / 8; } public static BigInteger zzb(BigInteger bigInteger, boolean z10, EllipticCurve ellipticCurve) { BigInteger zza = zzjz.zza(ellipticCurve); BigInteger mod = bigInteger.multiply(bigInteger).add(ellipticCurve.getA()).multiply(bigInteger).add(ellipticCurve.getB()).mod(zza); if (zza.signum() != 1) { throw new InvalidAlgorithmParameterException("p must be positive"); } BigInteger mod2 = mod.mod(zza); BigInteger bigInteger2 = BigInteger.ZERO; if (!mod2.equals(bigInteger2)) { if (zza.testBit(0) && zza.testBit(1)) { bigInteger2 = mod2.modPow(zza.add(BigInteger.ONE).shiftRight(2), zza); } else if (zza.testBit(0) && !zza.testBit(1)) { bigInteger2 = BigInteger.ONE; BigInteger shiftRight = zza.subtract(bigInteger2).shiftRight(1); int i10 = 0; while (true) { BigInteger mod3 = bigInteger2.multiply(bigInteger2).subtract(mod2).mod(zza); if (mod3.equals(BigInteger.ZERO)) { break; } BigInteger modPow = mod3.modPow(shiftRight, zza); BigInteger bigInteger3 = BigInteger.ONE; if (modPow.add(bigInteger3).equals(zza)) { BigInteger shiftRight2 = zza.add(bigInteger3).shiftRight(1); BigInteger bigInteger4 = bigInteger2; for (int bitLength = shiftRight2.bitLength() - 2; bitLength >= 0; bitLength--) { BigInteger multiply = bigInteger4.multiply(bigInteger3); bigInteger4 = bigInteger4.multiply(bigInteger4).add(bigInteger3.multiply(bigInteger3).mod(zza).multiply(mod3)).mod(zza); BigInteger mod4 = multiply.add(multiply).mod(zza); if (shiftRight2.testBit(bitLength)) { BigInteger mod5 = bigInteger4.multiply(bigInteger2).add(mod4.multiply(mod3)).mod(zza); bigInteger3 = bigInteger2.multiply(mod4).add(bigInteger4).mod(zza); bigInteger4 = mod5; } else { bigInteger3 = mod4; } } bigInteger2 = bigInteger4; } else { if (!modPow.equals(bigInteger3)) { throw new InvalidAlgorithmParameterException("p is not prime"); } bigInteger2 = bigInteger2.add(bigInteger3); i10++; if (i10 == 128 && !zza.isProbablePrime(80)) { throw new InvalidAlgorithmParameterException("p is not prime"); } } } } else { bigInteger2 = null; } if (bigInteger2 != null && bigInteger2.multiply(bigInteger2).mod(zza).compareTo(mod2) != 0) { throw new GeneralSecurityException("Could not find a modular square root"); } } return z10 != bigInteger2.testBit(0) ? zza.subtract(bigInteger2).mod(zza) : bigInteger2; } public static KeyPair zzc(ECParameterSpec eCParameterSpec) { KeyPairGenerator keyPairGenerator = (KeyPairGenerator) zzvp.zzf.zza("EC"); keyPairGenerator.initialize(eCParameterSpec); return keyPairGenerator.generateKeyPair(); } public static void zzd(ECPublicKey eCPublicKey, ECPrivateKey eCPrivateKey) { zze(eCPublicKey, eCPrivateKey); zzjz.zzb(eCPublicKey.getW(), eCPrivateKey.getParams().getCurve()); } static void zze(ECPublicKey eCPublicKey, ECPrivateKey eCPrivateKey) { try { ECParameterSpec params = eCPublicKey.getParams(); ECParameterSpec params2 = eCPrivateKey.getParams(); ECParameterSpec eCParameterSpec = zzjz.zza; if (params.getCurve().equals(params2.getCurve()) && params.getGenerator().equals(params2.getGenerator()) && params.getOrder().equals(params2.getOrder()) && params.getCofactor() == params2.getCofactor()) { } else { throw new GeneralSecurityException("invalid public key spec"); } } catch (IllegalArgumentException | NullPointerException e10) { throw new GeneralSecurityException(e10); } } public static byte[] zzf(ECPrivateKey eCPrivateKey, ECPublicKey eCPublicKey) { zze(eCPublicKey, eCPrivateKey); ECPoint w10 = eCPublicKey.getW(); zzjz.zzb(w10, eCPrivateKey.getParams().getCurve()); PublicKey generatePublic = ((KeyFactory) zzvp.zzg.zza("EC")).generatePublic(new ECPublicKeySpec(w10, eCPrivateKey.getParams())); KeyAgreement keyAgreement = (KeyAgreement) zzvp.zze.zza("ECDH"); keyAgreement.init(eCPrivateKey); try { keyAgreement.doPhase(generatePublic, true); byte[] generateSecret = keyAgreement.generateSecret(); EllipticCurve curve = eCPrivateKey.getParams().getCurve(); BigInteger bigInteger = new BigInteger(1, generateSecret); if (bigInteger.signum() == -1 || bigInteger.compareTo(zzjz.zza(curve)) >= 0) { throw new GeneralSecurityException("shared secret is out of range"); } zzb(bigInteger, true, curve); return generateSecret; } catch (IllegalStateException e10) { throw new GeneralSecurityException(e10); } } public static ECPrivateKey zzg(int i10, byte[] bArr) { return (ECPrivateKey) ((KeyFactory) zzvp.zzg.zza("EC")).generatePrivate(new ECPrivateKeySpec(new BigInteger(1, bArr), zzi(i10))); } public static ECPublicKey zzh(ECParameterSpec eCParameterSpec, int i10, byte[] bArr) { ECPoint eCPoint; EllipticCurve curve = eCParameterSpec.getCurve(); int zza = zza(curve); int i11 = i10 - 1; boolean z10 = false; if (i11 == 0) { int length = bArr.length; if (length != zza + zza + 1) { throw new GeneralSecurityException("invalid point size"); } if (bArr[0] != 4) { throw new GeneralSecurityException("invalid point format"); } int i12 = zza + 1; eCPoint = new ECPoint(new BigInteger(1, Arrays.copyOfRange(bArr, 1, i12)), new BigInteger(1, Arrays.copyOfRange(bArr, i12, length))); zzjz.zzb(eCPoint, curve); } else if (i11 != 1) { int length2 = bArr.length; if (length2 != zza + zza) { throw new GeneralSecurityException("invalid point size"); } eCPoint = new ECPoint(new BigInteger(1, Arrays.copyOfRange(bArr, 0, zza)), new BigInteger(1, Arrays.copyOfRange(bArr, zza, length2))); zzjz.zzb(eCPoint, curve); } else { BigInteger zza2 = zzjz.zza(curve); int length3 = bArr.length; if (length3 != zza + 1) { throw new GeneralSecurityException("compressed point has wrong length"); } byte b10 = bArr[0]; if (b10 != 2) { if (b10 != 3) { throw new GeneralSecurityException("invalid format"); } z10 = true; } BigInteger bigInteger = new BigInteger(1, Arrays.copyOfRange(bArr, 1, length3)); if (bigInteger.signum() == -1 || bigInteger.compareTo(zza2) >= 0) { throw new GeneralSecurityException("x is out of range"); } eCPoint = new ECPoint(bigInteger, zzb(bigInteger, z10, curve)); } return (ECPublicKey) ((KeyFactory) zzvp.zzg.zza("EC")).generatePublic(new ECPublicKeySpec(eCPoint, eCParameterSpec)); } public static ECParameterSpec zzi(int i10) { int i11 = i10 - 1; return i11 != 0 ? i11 != 1 ? zzjz.zzc : zzjz.zzb : zzjz.zza; } }