📄 eccurve$fp.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: ECCurve.java
package jit.math.ec;
import jit.math.BigInteger;
// Referenced classes of package jit.math.ec:
// ECCurve, ECPoint, ECFieldElement
public static class Fp extends ECCurve
{
public BigInteger getQ()
{
return q;
}
public ECFieldElement fromBigInteger(BigInteger x)
{
return new Fp(q, x);
}
public ECPoint decodePoint(byte encoded[])
{
ECPoint p = null;
switch(encoded[0])
{
case 2: // '\002'
case 3: // '\003'
int ytilde = encoded[0] & 0x1;
byte i[] = new byte[encoded.length - 1];
System.arraycopy(encoded, 1, i, 0, i.length);
ECFieldElement x = new Fp(q, new BigInteger(1, i));
ECFieldElement alpha = x.multiply(x.square()).add(x.multiply(a).add(b));
ECFieldElement beta = alpha.sqrt();
if(beta == null)
throw new RuntimeException("Invalid point compression");
int bit0 = beta.toBigInteger().testBit(0) ? 0 : 1;
if(bit0 == ytilde)
p = new Fp(this, x, beta);
else
p = new Fp(this, x, new Fp(q, q.subtract(beta.toBigInteger())));
break;
case 4: // '\004'
byte xEnc[] = new byte[(encoded.length - 1) / 2];
byte yEnc[] = new byte[(encoded.length - 1) / 2];
System.arraycopy(encoded, 1, xEnc, 0, xEnc.length);
System.arraycopy(encoded, xEnc.length + 1, yEnc, 0, yEnc.length);
p = new Fp(this, new Fp(q, new BigInteger(1, xEnc)), new Fp(q, new BigInteger(1, yEnc)));
break;
default:
throw new RuntimeException("Invalid point encoding 0x".concat(String.valueOf(String.valueOf(Integer.toString(encoded[0], 16)))));
}
return p;
}
public Fp(BigInteger q, BigInteger a, BigInteger b)
{
super(q, a, b);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -