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