我正在用 JavaCard 开发软件以添加 ECC 中的点。问题是我需要一些基本操作,所以目前,我需要乘法和求逆,我已经有了加法和减法。
我试图开发蒙哥马利乘法,但它适用于 GF(2^m) (我认为)。
所以我的例子是:
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= 3 C 必须是 0, C = A. B (mode p) 但是这个例子 A = 7, B=2, p=5 , C 必须是 4,但我有49.
有人可以帮我吗?
更多方法:
public static byte getBytePos(byte b, byte pos){
return (byte)(((b & 0xff) >> pos) & 1);
}
目前我试图简单,但想法是乘以非常大的数字,如字节数组[10]