s_mp_mul s_mp_sqr mp_mul

9 fungsi mp_sub_mod adalah sebagai berikut: Input : mp_int a, mp_int b dan mp_int p Output : c = a - b mod p 1. c a - b mp_sub 2. Else if c.sign = MP_NEG c c + p mp_add 3. Return MP_OKAY

c. Perkalian

Operasi perkalian yang terdapat dalam librari dibagi menjadi beberapa fungsi. Fungsi- fungsi tersebut yaitu:

1. s_mp_mul

Fungsi s_mp_mul merupakan fungsi perkalian dua bilangan mutlak mp_int yang menggunakan algoritme schoolbook. Jika dua bilangan mp_int a dan b mempunyai digit array yang sama sebanyak n, maka banyaknya perkalian antar digit array adalah n 2 dan banyaknya penjumlahan adalah n-1 2 Weimerskirch Paar 2006. Algoritme fungsi s_mp_mul adalah sebagai berikut: Input : mp_int a dan mp_int b Output : c = |a| |b| 1. Inisialisasi x dan y 2. For n from 0 to b.used-1 u For m from 0 to a.used-1 x m+n a m b n + u mod basis u a m b n + u basis If u 0 x m+n u x.used m + n +1 Else x.used m + n y y + x mp_add x 0 mp_zero 3. c y 4. Bersihkan variabel sementara 5. Return MP_OKAY Algoritme fungsi s_mp_mul di atas menunjukkan bahwa fungsi tersebut melakukan perkalian bilangan a dengan seluruh digit array b dimana setiap perkalian menghasilkan bilangan x. Hasil akhir dari fungsi ini merupakan penjumlahan seluruh bilangan x yang dihasilkan.

2. s_mp_sqr

Fungsi s_mp_sqr merupakan fungsi kuadrat atau fungsi perkalian khusus dimana nilai multiplicand sama dengan nilai multiplier. Untuk bilangan n-digit array, diperlukan n 2 + n 2 perkalian tunggal. Hal ini tentu akan lebih baik jika dibandingkan dengan perkalian biasa yang memerlukan n 2 perkalian tunggal. Algoritme fungsi s_mp_sqr adalah sebagai berikut: Input : mp_int a Output : b = a 2 1. Inisialisasi c init 2. c.used 2 a.used 3. For i from 0 to a.used-1 r c 2i + a i 2 c 2i r mod basis u r basis k 1 For j from i + 1 to a.used-1 r 2 a i a j + u + c 2i + k c 2i + k r mod basis u r basis k k +1 While u 0 do r u + c 2i + k c 2i + k r mod basis u r basis k k +1 4. mp_clear_zeroc 5. b c 6. Bersihkan variabel sementara 7. Return MP_OKAY

3. mp_mul

Fungsi mp_mul merupakan fungsi perkalian dua bilangan mp_int dengan melihat tanda dari kedua bilangan tersebut. Algoritme fungsi mp_mul adalah sebagai berikut: Input : mp_int a dan mp_int b Output : c = a b 1. c = |a| |b| s_mp_mul 2. If a.sign = b.sign c.sign MP_ZPOS 3. Else If c= 0 c.sign MP_ZPOS Else c.sign MP_NEG 4. Return MP_OKAY Algoritme fungsi mp_mul di atas menunjukkan bahwa fungsi tersebut akan mengalikan dua bilangan mp_int dengan melihat tanda dari kedua bilangan tersebut. Jika kedua bilangan mempunyai tanda yang sama, maka hasil yang diperoleh bernilai 10 positif. Akan tetapi, jika kedua bilangan mempunyai tanda yang berbeda maka hasil yang diperoleh bernilai negatif tetapi jika salah satu bilangannya bernilai 0 maka hasil yang diperoleh bernilai positif.

4. mp_mul_mod