2016-05-07 2 views
0

Я разрабатываю программное обеспечение в 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] байт

ответ

0

Я предположил, что что-то здесь не так:

C = (byte)(((C & 0xFF) + (C & 0xFF)) + ((A & 0xff) << getBytePos(B,i))); 

Я создал метод, чтобы умножить число байт, а не только с помощью shift to the right <<

Итак:

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; 
    } 

так, то я добавил его в своем оригинальном методе (в строке, помеченной):

C = (byte)(((C & 0xFF) + (C & 0xFF)) + bmult(A, getBytePos(B,i)) ); 

сейчас она работает правильно, мне нужно, чтобы проверить его более

У кого-то есть другое решение?

Смежные вопросы