当我在JPBC中使用element.mul(int)函数时,不支持值错误

时间:2017-12-16 12:13:54

标签: java

抱歉我先破坏英语......

当我在下面运行我的代码时,它总是给我错误消息

我的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时,结果是否正确?

我将JPBC的所有* .jar文件添加到我的项目的类路径中 jar of JPBC in detail

我在Eclipse中使用了win10。 版本:jpbc-2.0.0,Java-1.8.0_65。

感谢您的回复(*'∀`)〜♡

1 个答案:

答案 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 是身份。