首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GF(p)上的乘法

GF(p)上的乘法
EN

Stack Overflow用户
提问于 2016-05-07 17:59:27
回答 1查看 125关注 0票数 0

我正在开发JavaCard中的软件,以增加ECC的点。问题是我需要一些基运算,所以现在我需要乘法和反转,我已经有了加法和减法。

我正在尝试开发montgomery乘法,但它是针对GF(2^m) (我想)的。

所以我的例子是:

代码语言:javascript
复制
public static void multiplicationGF_p2(){
        byte A = (byte) 7;
        byte p = (byte) 5;
        byte B = (byte) 2;
        byte C = (byte) 0;
        byte n = (byte)8;
        byte i =  (byte)(n - 1);
        for(; i >= 0; i--){
            C = (byte)(((C & 0xFF) + (C & 0xFF) ) + ((A & 0xff) << getBytePos(B,i)));
            if((C & 0xFF) >= (byte)(p & 0xFF)){
                C = (byte) ((C & 0xFF)-(p & 0xFF));
            }
            if((C & 0xFF) >= (byte)(p & 0xFF)){
                C = (byte) ((C & 0xFF)-(p & 0xFF));
            }
        }
    }

例如A = 2,B =3,p= 3C必须是0,C=A。B(模式p),但是这个例子A= 7,B=2,p=5,C必须是4,但我有49。

有人能帮我一下吗?

更多方法:

代码语言:javascript
复制
public static byte getBytePos(byte b, byte pos){
        return (byte)(((b & 0xff) >> pos) & 1);
}

我现在尽量简单,但我的想法是做非常大的数字的乘法,比如字节的arrays10

EN

回答 1

Stack Overflow用户

发布于 2016-05-07 18:27:26

我假设这里出了点问题:

代码语言:javascript
复制
 C = (byte)(((C & 0xFF) + (C & 0xFF) ) + ((A & 0xff) << getBytePos(B,i)));

我已经创建了一个方法来乘以字节数,而不仅仅是使用shift to the right <<

所以:

代码语言:javascript
复制
public static byte bmult(byte x, byte y){ 
        byte total = (byte)0;
        byte i;
        byte n = (byte)8; // multiplication for 8 bits or 1 byte
        for(i = n ; i >= 0 ; i--)
        {
            total <<= 1;
            if( (((y & 0xff) & (1 << i)) >> i) != (byte)0 )
            {
                total = (byte)(total + x);
            }
        }

        return total;
    }

因此,我将其添加到我的原始方法中(在标记的行中):

代码语言:javascript
复制
C = (byte)(((C & 0xFF) + (C & 0xFF) ) + bmult(A, getBytePos(B,i))  );

现在它工作正常,我需要对它进行更多的测试

有人有别的解决方案吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37087077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档