📄 ecpoint.java
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi
// Source File Name: ECPoint.java
package jit.math.ec;
import jit.math.BigInteger;
// Referenced classes of package jit.math.ec:
// ECFieldElement, ECCurve, ECConstants
public abstract class ECPoint
{
public static class Fp extends ECPoint
{
public byte[] getEncoded()
{
byte PC;
if(getY().toBigInteger().testBit(0))
PC = 2;
else
PC = 3;
byte X[] = getX().toBigInteger().toByteArray();
byte PO[] = new byte[X.length + 1];
PO[0] = PC;
System.arraycopy(X, 0, PO, 1, X.length);
return PO;
}
public byte[] getEncoded(boolean uncompress)
{
if(uncompress)
{
byte PC = 4;
byte X[] = getX().toBigInteger().toByteArray();
byte Y[] = getY().toBigInteger().toByteArray();
int xOff = X[0] != 0 ? 0 : 1;
int yOff = Y[0] != 0 ? 0 : 1;
byte PO[] = new byte[(((X.length - xOff) + Y.length) - yOff) + 1];
PO[0] = PC;
System.arraycopy(X, xOff, PO, 1, X.length - xOff);
System.arraycopy(Y, yOff, PO, (X.length - xOff) + 1, Y.length - yOff);
return PO;
} else
{
return getEncoded();
}
}
public ECPoint add(ECPoint b)
{
if(getX().toBigInteger().equals(ECConstants.ZERO))
return b;
if(b.getX().toBigInteger().equals(ECConstants.ZERO))
{
return this;
} else
{
ECFieldElement gamma = b.y.subtract(y).divide(b.x.subtract(x));
ECFieldElement x3 = gamma.multiply(gamma).subtract(x).subtract(b.x);
ECFieldElement y3 = gamma.multiply(x.subtract(x3)).subtract(y);
return new Fp(curve, x3, y3);
}
}
public ECPoint twice()
{
if(getX().toBigInteger().equals(ECConstants.ZERO))
{
return this;
} else
{
ECFieldElement TWO = curve.fromBigInteger(BigInteger.valueOf(2L));
ECFieldElement THREE = curve.fromBigInteger(BigInteger.valueOf(3L));
ECFieldElement gamma = x.multiply(x).multiply(THREE).add(curve.a).divide(y.multiply(TWO));
ECFieldElement x3 = gamma.multiply(gamma).subtract(x.multiply(TWO));
ECFieldElement y3 = gamma.multiply(x.subtract(x3)).subtract(y);
return new Fp(curve, x3, y3);
}
}
public ECPoint subtract(ECPoint p2)
{
return add(new Fp(curve, p2.x, p2.y.negate()));
}
public ECPoint multiply(BigInteger k)
{
BigInteger e = k;
BigInteger h = e.multiply(BigInteger.valueOf(3L));
ECPoint R = this;
for(int i = h.bitLength() - 2; i > 0; i--)
{
R = R.twice();
if(h.testBit(i) && !e.testBit(i))
{
R = R.add(this);
continue;
}
if(!h.testBit(i) && e.testBit(i))
R = R.subtract(this);
}
return R;
}
public Fp(ECCurve curve, ECFieldElement x, ECFieldElement y)
{
super(curve, x, y);
}
}
ECCurve curve;
ECFieldElement x;
ECFieldElement y;
protected ECPoint(ECCurve curve, ECFieldElement x, ECFieldElement y)
{
this.curve = curve;
this.x = x;
this.y = y;
}
public ECFieldElement getX()
{
return x;
}
public ECFieldElement getY()
{
return y;
}
public boolean equals(Object other)
{
if(other == this)
return true;
if(!(other instanceof ECPoint))
{
return false;
} else
{
ECPoint o = (ECPoint)other;
return x.equals(o.x) && y.equals(o.y);
}
}
public abstract byte[] getEncoded();
public abstract byte[] getEncoded(boolean flag);
public abstract ECPoint add(ECPoint ecpoint);
public abstract ECPoint subtract(ECPoint ecpoint);
public abstract ECPoint twice();
public abstract ECPoint multiply(BigInteger biginteger);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -