what-the-bank/sources/org/bouncycastle/math/ec/ECCurve.java

682 lines
26 KiB
Java

package org.bouncycastle.math.ec;
import java.math.BigInteger;
import java.util.Hashtable;
import java.util.Random;
import org.bouncycastle.math.ec.ECFieldElement;
import org.bouncycastle.math.ec.ECPoint;
import org.bouncycastle.math.ec.endo.ECEndomorphism;
import org.bouncycastle.math.ec.endo.GLVEndomorphism;
import org.bouncycastle.math.field.FiniteField;
import org.bouncycastle.math.field.FiniteFields;
import org.bouncycastle.util.BigIntegers;
import org.bouncycastle.util.Integers;
/* loaded from: classes6.dex */
public abstract class ECCurve {
public static final int COORD_AFFINE = 0;
public static final int COORD_HOMOGENEOUS = 1;
public static final int COORD_JACOBIAN = 2;
public static final int COORD_JACOBIAN_CHUDNOVSKY = 3;
public static final int COORD_JACOBIAN_MODIFIED = 4;
public static final int COORD_LAMBDA_AFFINE = 5;
public static final int COORD_LAMBDA_PROJECTIVE = 6;
public static final int COORD_SKEWED = 7;
public ECFieldElement a;
public ECFieldElement b;
public BigInteger cofactor;
protected FiniteField field;
public BigInteger order;
public int coord = 0;
protected ECEndomorphism endomorphism = null;
protected ECMultiplier multiplier = null;
protected abstract ECCurve cloneCurve();
/* JADX INFO: Access modifiers changed from: protected */
public abstract ECPoint createRawPoint(ECFieldElement eCFieldElement, ECFieldElement eCFieldElement2, boolean z);
/* JADX INFO: Access modifiers changed from: protected */
public abstract ECPoint createRawPoint(ECFieldElement eCFieldElement, ECFieldElement eCFieldElement2, ECFieldElement[] eCFieldElementArr, boolean z);
protected abstract ECPoint decompressPoint(int i, BigInteger bigInteger);
public abstract ECFieldElement fromBigInteger(BigInteger bigInteger);
public abstract int getFieldSize();
public abstract ECPoint getInfinity();
public abstract boolean isValidFieldElement(BigInteger bigInteger);
public boolean supportsCoordinateSystem(int i) {
return i == 0;
}
public ECPoint validatePoint(BigInteger bigInteger, BigInteger bigInteger2, boolean z) {
ECPoint createPoint = createPoint(bigInteger, bigInteger2, z);
if (createPoint.isValid()) {
return createPoint;
}
throw new IllegalArgumentException("Invalid point coordinates");
}
public ECPoint validatePoint(BigInteger bigInteger, BigInteger bigInteger2) {
ECPoint createPoint = createPoint(bigInteger, bigInteger2);
if (createPoint.isValid()) {
return createPoint;
}
throw new IllegalArgumentException("Invalid point coordinates");
}
public void setPreCompInfo(ECPoint eCPoint, String str, PreCompInfo preCompInfo) {
checkPoint(eCPoint);
synchronized (eCPoint) {
Hashtable hashtable = eCPoint.preCompTable;
if (hashtable == null) {
hashtable = new Hashtable(4);
eCPoint.preCompTable = hashtable;
}
hashtable.put(str, preCompInfo);
}
}
public void normalizeAll(ECPoint[] eCPointArr, int i, int i2, ECFieldElement eCFieldElement) {
checkPoints(eCPointArr, i, i2);
int coordinateSystem = getCoordinateSystem();
if (coordinateSystem == 0 || coordinateSystem == 5) {
if (eCFieldElement != null) {
throw new IllegalArgumentException("'iso' not valid for affine coordinates");
}
return;
}
ECFieldElement[] eCFieldElementArr = new ECFieldElement[i2];
int[] iArr = new int[i2];
int i3 = 0;
for (int i4 = 0; i4 < i2; i4++) {
int i5 = i + i4;
ECPoint eCPoint = eCPointArr[i5];
if (eCPoint != null && (eCFieldElement != null || !eCPoint.isNormalized())) {
eCFieldElementArr[i3] = eCPoint.getZCoord(0);
iArr[i3] = i5;
i3++;
}
}
if (i3 == 0) {
return;
}
ECAlgorithms.montgomeryTrick(eCFieldElementArr, 0, i3, eCFieldElement);
for (int i6 = 0; i6 < i3; i6++) {
int i7 = iArr[i6];
eCPointArr[i7] = eCPointArr[i7].normalize(eCFieldElementArr[i6]);
}
}
public void normalizeAll(ECPoint[] eCPointArr) {
normalizeAll(eCPointArr, 0, eCPointArr.length, null);
}
public ECPoint importPoint(ECPoint eCPoint) {
if (this == eCPoint.getCurve()) {
return eCPoint;
}
if (eCPoint.isInfinity()) {
return getInfinity();
}
ECPoint normalize = eCPoint.normalize();
return validatePoint(normalize.getXCoord().toBigInteger(), normalize.getYCoord().toBigInteger(), normalize.withCompression);
}
public int hashCode() {
return (getField().hashCode() ^ Integers.rotateLeft(getA().toBigInteger().hashCode(), 8)) ^ Integers.rotateLeft(getB().toBigInteger().hashCode(), 16);
}
public PreCompInfo getPreCompInfo(ECPoint eCPoint, String str) {
PreCompInfo preCompInfo;
checkPoint(eCPoint);
synchronized (eCPoint) {
Hashtable hashtable = eCPoint.preCompTable;
preCompInfo = hashtable == null ? null : (PreCompInfo) hashtable.get(str);
}
return preCompInfo;
}
/* loaded from: classes6.dex */
public static class F2m extends AbstractF2m {
private static final int F2M_DEFAULT_COORDS = 6;
private ECPoint.F2m infinity;
private int k1;
private int k2;
private int k3;
private int m;
@Override // org.bouncycastle.math.ec.ECCurve
public boolean supportsCoordinateSystem(int i) {
return i == 0 || i == 1 || i == 6;
}
public boolean isTrinomial() {
return this.k2 == 0 && this.k3 == 0;
}
public BigInteger getN() {
return this.order;
}
public int getM() {
return this.m;
}
public int getK3() {
return this.k3;
}
public int getK2() {
return this.k2;
}
public int getK1() {
return this.k1;
}
@Override // org.bouncycastle.math.ec.ECCurve
public ECPoint getInfinity() {
return this.infinity;
}
public BigInteger getH() {
return this.cofactor;
}
@Override // org.bouncycastle.math.ec.ECCurve
public int getFieldSize() {
return this.m;
}
@Override // org.bouncycastle.math.ec.ECCurve
public ECFieldElement fromBigInteger(BigInteger bigInteger) {
return new ECFieldElement.F2m(this.m, this.k1, this.k2, this.k3, bigInteger);
}
@Override // org.bouncycastle.math.ec.ECCurve
protected ECPoint createRawPoint(ECFieldElement eCFieldElement, ECFieldElement eCFieldElement2, ECFieldElement[] eCFieldElementArr, boolean z) {
return new ECPoint.F2m(this, eCFieldElement, eCFieldElement2, eCFieldElementArr, z);
}
@Override // org.bouncycastle.math.ec.ECCurve
protected ECPoint createRawPoint(ECFieldElement eCFieldElement, ECFieldElement eCFieldElement2, boolean z) {
return new ECPoint.F2m(this, eCFieldElement, eCFieldElement2, z);
}
@Override // org.bouncycastle.math.ec.ECCurve
protected ECMultiplier createDefaultMultiplier() {
return isKoblitz() ? new WTauNafMultiplier() : super.createDefaultMultiplier();
}
@Override // org.bouncycastle.math.ec.ECCurve
protected ECCurve cloneCurve() {
return new F2m(this.m, this.k1, this.k2, this.k3, this.a, this.b, this.order, this.cofactor);
}
public F2m(int i, int i2, BigInteger bigInteger, BigInteger bigInteger2, BigInteger bigInteger3, BigInteger bigInteger4) {
this(i, i2, 0, 0, bigInteger, bigInteger2, bigInteger3, bigInteger4);
}
public F2m(int i, int i2, BigInteger bigInteger, BigInteger bigInteger2) {
this(i, i2, 0, 0, bigInteger, bigInteger2, (BigInteger) null, (BigInteger) null);
}
protected F2m(int i, int i2, int i3, int i4, ECFieldElement eCFieldElement, ECFieldElement eCFieldElement2, BigInteger bigInteger, BigInteger bigInteger2) {
super(i, i2, i3, i4);
this.m = i;
this.k1 = i2;
this.k2 = i3;
this.k3 = i4;
this.order = bigInteger;
this.cofactor = bigInteger2;
this.infinity = new ECPoint.F2m(this, null, null);
this.a = eCFieldElement;
this.b = eCFieldElement2;
this.coord = 6;
}
public F2m(int i, int i2, int i3, int i4, BigInteger bigInteger, BigInteger bigInteger2, BigInteger bigInteger3, BigInteger bigInteger4) {
super(i, i2, i3, i4);
this.m = i;
this.k1 = i2;
this.k2 = i3;
this.k3 = i4;
this.order = bigInteger3;
this.cofactor = bigInteger4;
this.infinity = new ECPoint.F2m(this, null, null);
this.a = fromBigInteger(bigInteger);
this.b = fromBigInteger(bigInteger2);
this.coord = 6;
}
public F2m(int i, int i2, int i3, int i4, BigInteger bigInteger, BigInteger bigInteger2) {
this(i, i2, i3, i4, bigInteger, bigInteger2, (BigInteger) null, (BigInteger) null);
}
}
public BigInteger getOrder() {
return this.order;
}
public ECMultiplier getMultiplier() {
ECMultiplier eCMultiplier;
synchronized (this) {
if (this.multiplier == null) {
this.multiplier = createDefaultMultiplier();
}
eCMultiplier = this.multiplier;
}
return eCMultiplier;
}
public FiniteField getField() {
return this.field;
}
public ECEndomorphism getEndomorphism() {
return this.endomorphism;
}
public int getCoordinateSystem() {
return this.coord;
}
public BigInteger getCofactor() {
return this.cofactor;
}
public ECFieldElement getB() {
return this.b;
}
/* loaded from: classes6.dex */
public static class Fp extends AbstractFp {
private static final int FP_DEFAULT_COORDS = 4;
ECPoint.Fp infinity;
BigInteger q;
BigInteger r;
@Override // org.bouncycastle.math.ec.ECCurve
public boolean supportsCoordinateSystem(int i) {
return i == 0 || i == 1 || i == 2 || i == 4;
}
@Override // org.bouncycastle.math.ec.ECCurve
public ECPoint importPoint(ECPoint eCPoint) {
int coordinateSystem;
return (this == eCPoint.getCurve() || getCoordinateSystem() != 2 || eCPoint.isInfinity() || !((coordinateSystem = eCPoint.getCurve().getCoordinateSystem()) == 2 || coordinateSystem == 3 || coordinateSystem == 4)) ? super.importPoint(eCPoint) : new ECPoint.Fp(this, fromBigInteger(eCPoint.x.toBigInteger()), fromBigInteger(eCPoint.y.toBigInteger()), new ECFieldElement[]{fromBigInteger(eCPoint.zs[0].toBigInteger())}, eCPoint.withCompression);
}
public BigInteger getQ() {
return this.q;
}
@Override // org.bouncycastle.math.ec.ECCurve
public ECPoint getInfinity() {
return this.infinity;
}
@Override // org.bouncycastle.math.ec.ECCurve
public int getFieldSize() {
return this.q.bitLength();
}
@Override // org.bouncycastle.math.ec.ECCurve
public ECFieldElement fromBigInteger(BigInteger bigInteger) {
return new ECFieldElement.Fp(this.q, this.r, bigInteger);
}
@Override // org.bouncycastle.math.ec.ECCurve
protected ECPoint createRawPoint(ECFieldElement eCFieldElement, ECFieldElement eCFieldElement2, ECFieldElement[] eCFieldElementArr, boolean z) {
return new ECPoint.Fp(this, eCFieldElement, eCFieldElement2, eCFieldElementArr, z);
}
@Override // org.bouncycastle.math.ec.ECCurve
protected ECPoint createRawPoint(ECFieldElement eCFieldElement, ECFieldElement eCFieldElement2, boolean z) {
return new ECPoint.Fp(this, eCFieldElement, eCFieldElement2, z);
}
@Override // org.bouncycastle.math.ec.ECCurve
protected ECCurve cloneCurve() {
return new Fp(this.q, this.r, this.a, this.b, this.order, this.cofactor);
}
protected Fp(BigInteger bigInteger, BigInteger bigInteger2, ECFieldElement eCFieldElement, ECFieldElement eCFieldElement2, BigInteger bigInteger3, BigInteger bigInteger4) {
super(bigInteger);
this.q = bigInteger;
this.r = bigInteger2;
this.infinity = new ECPoint.Fp(this, null, null);
this.a = eCFieldElement;
this.b = eCFieldElement2;
this.order = bigInteger3;
this.cofactor = bigInteger4;
this.coord = 4;
}
protected Fp(BigInteger bigInteger, BigInteger bigInteger2, ECFieldElement eCFieldElement, ECFieldElement eCFieldElement2) {
this(bigInteger, bigInteger2, eCFieldElement, eCFieldElement2, null, null);
}
public Fp(BigInteger bigInteger, BigInteger bigInteger2, BigInteger bigInteger3, BigInteger bigInteger4, BigInteger bigInteger5) {
super(bigInteger);
this.q = bigInteger;
this.r = ECFieldElement.Fp.calculateResidue(bigInteger);
this.infinity = new ECPoint.Fp(this, null, null);
this.a = fromBigInteger(bigInteger2);
this.b = fromBigInteger(bigInteger3);
this.order = bigInteger4;
this.cofactor = bigInteger5;
this.coord = 4;
}
public Fp(BigInteger bigInteger, BigInteger bigInteger2, BigInteger bigInteger3) {
this(bigInteger, bigInteger2, bigInteger3, null, null);
}
}
public ECFieldElement getA() {
return this.a;
}
public boolean equals(ECCurve eCCurve) {
return this == eCCurve || (eCCurve != null && getField().equals(eCCurve.getField()) && getA().toBigInteger().equals(eCCurve.getA().toBigInteger()) && getB().toBigInteger().equals(eCCurve.getB().toBigInteger()));
}
public boolean equals(Object obj) {
return this == obj || ((obj instanceof ECCurve) && equals((ECCurve) obj));
}
/* loaded from: classes6.dex */
public static abstract class AbstractF2m extends ECCurve {
private BigInteger[] si;
@Override // org.bouncycastle.math.ec.ECCurve
public boolean isValidFieldElement(BigInteger bigInteger) {
return bigInteger != null && bigInteger.signum() >= 0 && bigInteger.bitLength() <= getFieldSize();
}
public boolean isKoblitz() {
return this.order != null && this.cofactor != null && this.b.isOne() && (this.a.isZero() || this.a.isOne());
}
/* JADX INFO: Access modifiers changed from: package-private */
public BigInteger[] getSi() {
BigInteger[] bigIntegerArr;
synchronized (this) {
if (this.si == null) {
this.si = Tnaf.getSi(this);
}
bigIntegerArr = this.si;
}
return bigIntegerArr;
}
@Override // org.bouncycastle.math.ec.ECCurve
protected ECPoint decompressPoint(int i, BigInteger bigInteger) {
ECFieldElement eCFieldElement;
ECFieldElement fromBigInteger = fromBigInteger(bigInteger);
if (fromBigInteger.isZero()) {
eCFieldElement = getB().sqrt();
} else {
ECFieldElement solveQuadraticEquation = solveQuadraticEquation(fromBigInteger.square().invert().multiply(getB()).add(getA()).add(fromBigInteger));
if (solveQuadraticEquation != null) {
if (solveQuadraticEquation.testBitZero() != (i == 1)) {
solveQuadraticEquation = solveQuadraticEquation.addOne();
}
int coordinateSystem = getCoordinateSystem();
eCFieldElement = (coordinateSystem == 5 || coordinateSystem == 6) ? solveQuadraticEquation.add(fromBigInteger) : solveQuadraticEquation.multiply(fromBigInteger);
} else {
eCFieldElement = null;
}
}
if (eCFieldElement != null) {
return createRawPoint(fromBigInteger, eCFieldElement, true);
}
throw new IllegalArgumentException("Invalid point compression");
}
@Override // org.bouncycastle.math.ec.ECCurve
public ECPoint createPoint(BigInteger bigInteger, BigInteger bigInteger2, boolean z) {
ECFieldElement fromBigInteger = fromBigInteger(bigInteger);
ECFieldElement fromBigInteger2 = fromBigInteger(bigInteger2);
int coordinateSystem = getCoordinateSystem();
if (coordinateSystem == 5 || coordinateSystem == 6) {
if (!fromBigInteger.isZero()) {
fromBigInteger2 = fromBigInteger2.divide(fromBigInteger).add(fromBigInteger);
} else if (!fromBigInteger2.square().equals(getB())) {
throw new IllegalArgumentException();
}
}
return createRawPoint(fromBigInteger, fromBigInteger2, z);
}
private ECFieldElement solveQuadraticEquation(ECFieldElement eCFieldElement) {
ECFieldElement eCFieldElement2;
if (eCFieldElement.isZero()) {
return eCFieldElement;
}
ECFieldElement fromBigInteger = fromBigInteger(ECConstants.ZERO);
int fieldSize = getFieldSize();
Random random = new Random();
do {
ECFieldElement fromBigInteger2 = fromBigInteger(new BigInteger(fieldSize, random));
ECFieldElement eCFieldElement3 = eCFieldElement;
eCFieldElement2 = fromBigInteger;
for (int i = 1; i < fieldSize; i++) {
ECFieldElement square = eCFieldElement3.square();
eCFieldElement2 = eCFieldElement2.square().add(square.multiply(fromBigInteger2));
eCFieldElement3 = square.add(eCFieldElement);
}
if (!eCFieldElement3.isZero()) {
return null;
}
} while (eCFieldElement2.square().add(eCFieldElement2).isZero());
return eCFieldElement2;
}
public static BigInteger inverse(int i, int[] iArr, BigInteger bigInteger) {
return new LongArray(bigInteger).modInverse(i, iArr).toBigInteger();
}
private static FiniteField buildField(int i, int i2, int i3, int i4) {
if (i2 == 0) {
throw new IllegalArgumentException("k1 must be > 0");
}
if (i3 == 0) {
if (i4 == 0) {
return FiniteFields.getBinaryExtensionField(new int[]{0, i2, i});
}
throw new IllegalArgumentException("k3 must be 0 if k2 == 0");
}
if (i3 <= i2) {
throw new IllegalArgumentException("k2 must be > k1");
}
if (i4 > i3) {
return FiniteFields.getBinaryExtensionField(new int[]{0, i2, i3, i4, i});
}
throw new IllegalArgumentException("k3 must be > k2");
}
public AbstractF2m(int i, int i2, int i3, int i4) {
super(buildField(i, i2, i3, i4));
this.si = null;
}
}
public ECPoint decodePoint(byte[] bArr) {
ECPoint infinity;
int fieldSize = (getFieldSize() + 7) / 8;
byte b = bArr[0];
if (b != 0) {
if (b == 2 || b == 3) {
if (bArr.length != fieldSize + 1) {
throw new IllegalArgumentException("Incorrect length for compressed encoding");
}
infinity = decompressPoint(b & 1, BigIntegers.fromUnsignedByteArray(bArr, 1, fieldSize));
if (!infinity.satisfiesCofactor()) {
throw new IllegalArgumentException("Invalid point");
}
} else if (b != 4) {
if (b != 6 && b != 7) {
StringBuilder sb = new StringBuilder("Invalid point encoding 0x");
sb.append(Integer.toString(b, 16));
throw new IllegalArgumentException(sb.toString());
}
if (bArr.length != (fieldSize << 1) + 1) {
throw new IllegalArgumentException("Incorrect length for hybrid encoding");
}
BigInteger fromUnsignedByteArray = BigIntegers.fromUnsignedByteArray(bArr, 1, fieldSize);
BigInteger fromUnsignedByteArray2 = BigIntegers.fromUnsignedByteArray(bArr, fieldSize + 1, fieldSize);
if (fromUnsignedByteArray2.testBit(0) != (b == 7)) {
throw new IllegalArgumentException("Inconsistent Y coordinate in hybrid encoding");
}
infinity = validatePoint(fromUnsignedByteArray, fromUnsignedByteArray2);
} else {
if (bArr.length != (fieldSize << 1) + 1) {
throw new IllegalArgumentException("Incorrect length for uncompressed encoding");
}
infinity = validatePoint(BigIntegers.fromUnsignedByteArray(bArr, 1, fieldSize), BigIntegers.fromUnsignedByteArray(bArr, fieldSize + 1, fieldSize));
}
} else {
if (bArr.length != 1) {
throw new IllegalArgumentException("Incorrect length for infinity encoding");
}
infinity = getInfinity();
}
if (b == 0 || !infinity.isInfinity()) {
return infinity;
}
throw new IllegalArgumentException("Invalid infinity encoding");
}
public ECPoint createPoint(BigInteger bigInteger, BigInteger bigInteger2, boolean z) {
return createRawPoint(fromBigInteger(bigInteger), fromBigInteger(bigInteger2), z);
}
public ECPoint createPoint(BigInteger bigInteger, BigInteger bigInteger2) {
return createPoint(bigInteger, bigInteger2, false);
}
protected ECMultiplier createDefaultMultiplier() {
ECEndomorphism eCEndomorphism = this.endomorphism;
return eCEndomorphism instanceof GLVEndomorphism ? new GLVMultiplier(this, (GLVEndomorphism) eCEndomorphism) : new WNafL2RMultiplier();
}
/* loaded from: classes6.dex */
public class Config {
protected int coord;
protected ECEndomorphism endomorphism;
protected ECMultiplier multiplier;
final ECCurve this$0;
public Config setMultiplier(ECMultiplier eCMultiplier) {
this.multiplier = eCMultiplier;
return this;
}
public Config setEndomorphism(ECEndomorphism eCEndomorphism) {
this.endomorphism = eCEndomorphism;
return this;
}
public Config setCoordinateSystem(int i) {
this.coord = i;
return this;
}
public ECCurve create() {
if (!this.this$0.supportsCoordinateSystem(this.coord)) {
throw new IllegalStateException("unsupported coordinate system");
}
ECCurve cloneCurve = this.this$0.cloneCurve();
if (cloneCurve == this.this$0) {
throw new IllegalStateException("implementation returned current curve");
}
synchronized (cloneCurve) {
cloneCurve.coord = this.coord;
cloneCurve.endomorphism = this.endomorphism;
cloneCurve.multiplier = this.multiplier;
}
return cloneCurve;
}
Config(ECCurve eCCurve, int i, ECEndomorphism eCEndomorphism, ECMultiplier eCMultiplier) {
this.this$0 = eCCurve;
this.coord = i;
this.endomorphism = eCEndomorphism;
this.multiplier = eCMultiplier;
}
}
public Config configure() {
Config config;
synchronized (this) {
config = new Config(this, this.coord, this.endomorphism, this.multiplier);
}
return config;
}
protected void checkPoints(ECPoint[] eCPointArr, int i, int i2) {
if (eCPointArr == null) {
throw new IllegalArgumentException("'points' cannot be null");
}
if (i < 0 || i2 < 0 || i > eCPointArr.length - i2) {
throw new IllegalArgumentException("invalid range specified for 'points'");
}
for (int i3 = 0; i3 < i2; i3++) {
ECPoint eCPoint = eCPointArr[i + i3];
if (eCPoint != null && this != eCPoint.getCurve()) {
throw new IllegalArgumentException("'points' entries must be null or on this curve");
}
}
}
/* loaded from: classes6.dex */
public static abstract class AbstractFp extends ECCurve {
@Override // org.bouncycastle.math.ec.ECCurve
public boolean isValidFieldElement(BigInteger bigInteger) {
return bigInteger != null && bigInteger.signum() >= 0 && bigInteger.compareTo(getField().getCharacteristic()) < 0;
}
@Override // org.bouncycastle.math.ec.ECCurve
protected ECPoint decompressPoint(int i, BigInteger bigInteger) {
ECFieldElement fromBigInteger = fromBigInteger(bigInteger);
ECFieldElement sqrt = fromBigInteger.square().add(this.a).multiply(fromBigInteger).add(this.b).sqrt();
if (sqrt == null) {
throw new IllegalArgumentException("Invalid point compression");
}
if (sqrt.testBitZero() != (i == 1)) {
sqrt = sqrt.negate();
}
return createRawPoint(fromBigInteger, sqrt, true);
}
public AbstractFp(BigInteger bigInteger) {
super(FiniteFields.getPrimeField(bigInteger));
}
}
protected void checkPoints(ECPoint[] eCPointArr) {
checkPoints(eCPointArr, 0, eCPointArr.length);
}
protected void checkPoint(ECPoint eCPoint) {
if (eCPoint == null || this != eCPoint.getCurve()) {
throw new IllegalArgumentException("'point' must be non-null and on this curve");
}
}
public static int[] getAllCoordinateSystems() {
return new int[]{0, 1, 2, 3, 4, 5, 6, 7};
}
protected ECCurve(FiniteField finiteField) {
this.field = finiteField;
}
}