Я разрабатываю программное обеспечение в JavaCard для добавления точек в ECC. проблема в том, что мне нужны некоторые базовые операции, поэтому на данный момент мне нужно умножение и инверсия, у меня уже есть сложение и вычитание.умножение в GF (p)
Я пытался развить умножение montgomery, но это для GF (2 м) (я думаю).
поэтому мой пример:
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));
}
}
}
, например, А = 2, В = 3, р = 3 С должен быть 0, С = А. В (режим р) но это пример A = 7, B = 2, p = 5, C должен быть 4, но у меня есть 49.
Может кто-нибудь мне помочь? более
методы:
public static byte getBytePos(byte b, byte pos){
return (byte)(((b & 0xff) >> pos) & 1);
}
Я пытаюсь быть простым, на данный момент, но идея сделать умножение очень большого числа как массивы [10] байт