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

问题描述 投票:1回答:1

抱歉我的英语先破了....

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

我的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。

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

java
1个回答
0
投票

我对PBC并不十分熟悉,只掌握椭圆曲线的基本知识。我假设你要做的是在椭圆曲线上取一个点p并打印出0,p,p + p,p + p + p等等。 (我在这里使用加法表示法进行组操作;改为使用乘法表示法,你会尝试计算1,p,p2,p3,...)

由于某种原因,CurveElement不会覆盖mul(int),因此基类AbstractElement尝试将给定的整数转换为组元素,并使用元素e和此整数转换为的任何元素执行组操作。 JPBC仅支持将整数0和1转换为组元素,并且它们都转换为标识元素。

但是,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

当然,所有值都是相同的,因为你的元素e是身份。

© www.soinside.com 2019 - 2024. All rights reserved.