Return MP_OKAY b. s_mp_sub Return MP_OKAY Algoritme fungsi s_mp_sub di atas mp_sub

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