if b.length a. length 5. return -1 else 7. for n  a.length-1 to 0 if a if a end for 15. end if while u 1 do 4. quo  v u end while 12. g  while u ≠ 1 dan v ≠ 1 do while u genap do 5. u  u 1

6 Algoritme dari fungsi cmp_fpm adalah sebagai berikut : Input : fpm a dan b Output : Nilai perbandingan antara a dan b 1. if a.length b.length 2. return 1 3. else

4. if b.length a. length 5. return -1

6. else 7. for n  a.length-1 to 0

8. if a

n b n 9. return 1 10. end if

11. if a

n b n 12. return -1 13. end if

14. end for 15. end if

16. end if 17. return 0

Dari algoritme tersebut terlihat bahwa fungsi cmp_fpm akan membandingkan jumlah tempat di array yang digunakan pada a dan b. Jika a lebih banyak daripada b maka a b dan sebaliknya jika b lebih banyak daripada a maka a b. Jika array yang digunakan keduanya sama, maka akan dibandingkan mulai dari digit array paling signifikan antara keduanya. Jika semua nilai digit array sama, maka a = b. Aritmetika pada subfield Sebelum masuk ke algoritme optimal extension field , akan dijelaskan terlebih dahulu mengenai aritmetika pada subfield . Anggota direpresentasikan sebagai polinomial yang suku-sukunya mempunyai nilai koefisien. Operasi aritmetika yang digunakan pada suku-suku polinomial tersebut adalah aritmetika field prima . Dalam OEF, aritmetika field prima terhadap koefisien- koefisien polinomial ini biasa disebut sebagai aritmetika pada subfield. Misal az dan bz ∈ , maka az dan bz dapat ditulis sebagai berikut az = + ··· + + + bz = + ··· + + + Aritmetika yang digunakan pada az dan bz secara keseluruhan adalah aritmetika optimal extension field. Akan tetapi, aritmetika yang digunakan pada operasi antar koefisien elemen- elemen az dan bz yaitu a i dan b i adalah aritmetika field prima . Operasi-operasi aritmetika subfield yang digunakan pada aritmetika adalah sebagai berikut :

a. Penjumlahan

Operasi penjumlahan dalam adalah jumlah modulo p c = a + b mod p Nilai a, b p maka a + b 2p. Oleh karena itu, langkah reduksi yaitu modulo p dapat dengan mudah dilakukan dengan a + b – p jika a + b p Dengan begitu, dapat dipastikan bahwa c ∈ . Aritmetika OEF mendapat keuntungan dengan operasi ini karena tidak menyebabkan adanya carry. b. Pengurangan Operasi pengurangan dalam juga merupakan operasi kurang modulo p c = a - b mod p Nilai a , b p maka a - b -p. Oleh karena itu, langkah modulo p dapat dengan mudah dilakukan dengan p - b + a jika a b Dengan begitu, dapat dipastikan bahwa c ∈ . c. Perkalian Operasi perkalian dalam adalah kali modulo p c = a . b mod p Misal panjang bit a i , b i adalah w, maka panjang bit a.b 2w. Oleh karena itu, langkah reduksi modulo p yang dilakukan akan memastikan c ∈ dan membuat panjang bit c menjadi w kembali. Dalam penelitian ini, operasi modulo dalam dilakukan dengan suatu fungsi khusus. d. Reduksi Operasi a mod b bila dijalankan secara konvensional adalah mengurangkan a dengan b sampai a b. Akan tetapi, dengan menggunakan algoritme reduksi cepat yang dikemukakan Baley 2000 berikut, operasi modulo dapat dilakukan dengan lebih efisien. Algoritmenya adalah sebagai berikut Input : n, c, p = 2 n – c, x p 2 Output : r = x modulo p 1. q  x n 2. r  x – q n 7 3. r  r 4. i  0 5. while q i 0 do 6. q i+1  q c n 7. r i+1  q c – q i+1 c n 8. i  i + 1 9. r  r + r i

10. end while 11. while r p do

12. r  r – p 13. end while

e. Invers Misalkan a

∈ , maka g ∈ yang membuat g . mod p = 1 atau bisa ditulis dengan g . ≡ 1mod p disebut dengan invers a dalam atau notasinya g = . Ada dua macam algoritme invers dalam yang diimplementasikan dalam penelitian ini, yaitu algoritme invers Extended Euclidean dan algoritme Binary Invers. Algoritme Extended Euclidean Input : a ∈ , a 0 Output : g = ∈ 1. u  a, v  p 2.  1,  0

3. while u 1 do 4. quo  v u

5. rem  v mod u 6. x =  − x 1 .quo 7. v  u 8. u  rem 9.  x 1 10.  x

11. end while 12. g 

mod p Algoritme Binary Invers Input : a ∈ , a 0 Output : g = ∈ 1. u  a, v  p 2.  1,  0

3. while u ≠ 1 dan v ≠ 1 do

4. while u genap do 5. u  u 1

6. if

genap maka 7.  1

8. else 9.

 + 1

10. end if 11. end while

12. while v genap do 13. v  v 1

14. if

genap maka 15.  1

16. else 17.

 + 1

18. end if 19. end while

20. if u v maka 21.  –

22.  –

23. else 24. 

– 25.  –

26. end if 27. end while

28. if u == 1 maka 29. g 

mod p

30. else 31. g 