7 2. Else
min a.used
max b.used
x b
3 If c.alloc max +1 mp_growc,max +1
4. u 5. For n from 0 to min-1
c
n
a
n
+ b
n
+ u mod basis u
a
n
+ b
n
+ u basis 6. For n from min to max-1
c
n
x
n
+ u mod basis u
x
n
+ u basis 7. If u 0
c
n
u c.used
max +1 8. Else
c.used max
9. Return MP_OKAY
Algoritme fungsi s_mp_add di atas
menunjukkan bahwa fungsi tersebut akan melakukan proses penjumlahan antar digit
array yang dimulai dari digit array paling tidak signifikan. Jika hasil penjumlahannya
melebihi basis yang digunakan, maka akan menghasilkan nilai carry 1. Nilai carry ini
akan ditambahkan ke penjumlahan digit array berikutnya.
2. mp_add
Fungsi mp_add merupakan fungsi penjumlahan dua bilangan mp_int dengan
melihat tanda dari bilangan tersebut. Beberapa
kemungkinan tanda
yang dihasilkan dari penjumlahan dua bilangan
mp_int
dapat dilihat pada Tabel 3.
Algoritme fungsi mp_add adalah sebagai berikut:
Input : mp_int a dan mp_int b Output : c = a + b
1. If a.sign = b.sign
c.sign a.sign
c |a| + |b| s_mp_add
2. Else If | a | | b |
c.sign b.sign
c |b| - |a| s_mp_sub
Else if | a | | b | c.sign
a.sign c
|a| - |b| s_mp_sub Else
c.sign MP_ZPOS
c 0 mp_zero
3. Return MP_OKAY
Algoritme fungsi mp_add di atas
menunjukkan bahwa fungsi tersebut akan melakukan penjumlahan dua bilangan
mp_int
dengan melihat tanda dari kedua bilangan tersebut. Jika kedua bilangan
mempunyai tanda yang sama, maka operasi yang dilakukan adalah penjumlahan dan
hasil yang diperoleh mempunyai tanda yang
sama dengan
bilangan yang
ditambahkan. Akan tetapi, jika kedua bilangan mempunyai tanda yang berbeda,
maka operasi yang dilakukan adalah operasi pengurangan dan tanda dari hasil
yang
diperoleh bergantung
pada perbandingan kedua bilangan tersebut.
Tabel 3 Tanda hasil fungsi mp_add
Tanda a
b Ket
Operasi Tanda
c +
+ c = a + b
+ -
- c = a + b
- +
- a b
c = b - a -
- +
a b c = b - a
+ +
- a b
c = a - b +
- +
a b c = a- b
- +
- a = b
c = 0 +
- +
a = b c = 0
+ 3.
mp_add_mod
Fungsi mp_add_mod
merupakan fungsi penjumlahan yang digunakan dalam
field prima dimana hasil yang diperoleh harus merupakan anggota field tersebut.
Jika hasil penjumlahan yang diperoleh bukan merupakan anggota dalam field
prima tersebut, maka hasil tersebut harus dilakukan proses reduksi dengan bilangan
p. Algoritme fungsi mp_add_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_add
2. If c = p c
0 mp_zero 3. Else if c p
c c – p mp_sub
4. Return MP_OKAY b.
Pengurangan
Operasi pengurangan yang terdapat dalam librari dibagi menjadi beberapa fungsi. Fungsi-
fungsi tersebut yaitu:
8
1. s_mp_sub
Fungsi s_mp_sub digunakan untuk
melakukan proses
pengurangan dua
bilangan mutlak mp_int. Fungsi ini melakukan pengurangan antar digit array
sebanyak n sehingga kompleksitasnya adalah On dengan n adalah banyaknya
digit array. Algoritme fungsi s_mp_sub adalah sebagai berikut:
Input : mp_int a dan mp_int b Output : c = |a| - |b|
1. min b.used
2. max a.used
3. If c.alloc max mp_growc,max
4. u 5. For n from 0 to min-1
If a
n
≥ b
n
+ u c
n
a
n
- b
n
- u u
Else c
n
a
n
+ basis - b
n
– u u
1 6. For n from min to max-1
If a
n
≥ u c
n
a
n
- u u
Else c
n
a
n
+ basis – u u
1 7. c.used
max 8. mp_clear_zero c
9. Return MP_OKAY Algoritme fungsi s_mp_sub di atas
menunjukkan bahwa fungsi tersebut akan melakukan proses pengurangan antar digit
array yang dimulai dari digit array paling tidak signifikan. Jika nilai digit array a
lebih besar dari digit array b ditambah carry, maka akan menghasilkan nilai carry
1. Nilai carry ini akan digunakan untuk mengurangi digit array a berikutnya.
2. mp_sub
Fungsi mp_sub merupakan fungsi pengurangan dua bilangan mp_int dengan
melihat tanda dari bilangan tersebut. Beberapa
kemungkinan tanda
yang dihasilkan dari pengurangan dua bilangan
mp_int
dapat dilihat pada Tabel 4.
Algoritme fungsi mp_sub adalah sebagai berikut:
Input : mp_int a dan mp_int b Output : c = a – b
1. If a.sign ≠ b.sign c.sign
a.sign c
|a| + |b| s_mp_add 2. Else
If | a | | b | c.sign
~ a.sign c
|b| - |a| s_mp_sub Else if | a | | b |
c.sign a.sign
c |a| - |b| s_mp_sub
Else c.sign
MP_ZPOS c
0 mp_zero 3. Return MP_OKAY
Algoritme fungsi mp_sub di atas
menunjukkan bahwa fungsi tersebut akan melakukan pengurangan dua bilangan
mp_int
dengan melihat tanda dari kedua bilangan tersebut. Jika kedua bilangan
mempunyai tanda yang berbeda, maka operasi yang dilakukan adalah penjumlahan
dan hasil yang diperoleh mempunyai tanda yang
sama dengan
bilangan yang
dikurangi. Akan tetapi, jika kedua bilangan mempunyai tanda yang sama, maka operasi
yang dilakukan adalah operasi pengurangan dan tanda dari hasil yang diperoleh
bergantung pada perbandingan kedua bilangan tersebut.
Tabel 4 Tanda hasil fungsi mp_sub Tanda
a b
Ket Operasi
Tanda c
+ -
c = a + b +
- +
c = a + b -
+ +
a b c = b - a
- -
- a b
c = b - a +
+ +
a b c = a - b
+ -
- a b
c = a- b -
+ +
a = b c = 0
+ -
- a = b
c = 0 +
3. mp_sub_mod