当我在下面运行我的代码时,它总是给我错误消息
我的java代码很简单:
TypeACurveGenerator pg = new TypeACurveGenerator(160,512);
PairingParameters typeAParams = pg.generate();
PairingFactory.getInstance().setUsePBCWhenPossible(true);
Pairing p=PairingFactory.getPairing(typeAParams);
Element e=p.getG1().newElement().setToOne();
int i=0;
for(i=0;i<5;i++)
{
System.out.println(i+" "+e+" "+e.mul(i));
}
这段代码只生成一个元素,并在元素和int之间相乘。
并且编译器给我输出:
0 0,0,1 0,0,1
1 0,0,1 0,0,1
Exception in thread "main" java.lang.IllegalStateException: Value not supported.
at it.unisa.dia.gas.plaf.jpbc.field.curve.CurveElement.set(CurveElement.java:73)
at it.unisa.dia.gas.plaf.jpbc.field.curve.CurveElement.set(CurveElement.java:12)
at it.unisa.dia.gas.plaf.jpbc.field.base.AbstractElement.mul(AbstractElement.java:82)
at test.main(test.java:27) //the line: System.out.println(i+" "+e+" "+e.mul(i));
我真的不知道这个错误信息的含义。
似乎当int大于1时,程序会收到错误。
我也很困惑的是,当元素乘法1等于乘以0时,结果是否正确?
我在Eclipse中使用了win10。 版本:jpbc-2.0.0,Java-1.8.0_65。
感谢您的回复(*'∀`)〜♡
答案 0 :(得分:0)
我对PBC并不十分熟悉,只掌握椭圆曲线的基本知识。我假设你要做的是在椭圆曲线上取一个点 p 并打印出0, p , p + p , p + p + p 等等。 (我在这里使用加法表示法进行组操作;改为使用乘法表示法,你会尝试计算1, p , p 2 , p 3 ,...)
由于某种原因,CurveElement
不会覆盖mul(int)
,因此基类AbstractElement
会尝试将给定的整数转换为组元素,并使用您的元素执行组操作{ {1}}以及此整数转换为的任何元素。 JPBC仅支持将整数0和1转换为组元素,并且它们都转换为标识元素。
但是,e
确实支持CurveElement
,这确实会执行您正在寻找的重复组操作。所以,而不是写
mul(BigInteger)
你可以尝试写作
System.out.println(i+" "+e+" "+e.mul(i));
我对您的代码进行了此更改,并输出以下内容:
System.out.println(i+" "+e+" "+e.mul(BigInteger.valueOf(i)));
当然,所有值都是相同的,因为您的元素0 0,0,1 0,0,1
1 0,0,1 0,0,1
2 0,0,1 0,0,1
3 0,0,1 0,0,1
4 0,0,1 0,0,1
是身份。