s_mp_add mp_add

6 memeriksa nilai pada digit array paling signifikan. Jika bernilai 0, maka fungsi tersebut akan melakukan proses looping sampai digit array tidak bernilai 0. Selama proses looping, nilai a.used berkurang 1. Librari dalam penelitian ini mempunyai beberapa fungsi yang digunakan sebagai operasi dasar dalam proses komputasi. Fungsi-fungsi tersebut yaitu:

a. mp_copy Fungsi mp_copy digunakan sebagai operasi

“sama dengan” = pada bilangan mp_int. Fungsi ini akan melakukan proses copy dari suatu bilangan mp_int ke bilangan mp_int yang lainnya. Algoritme fungsi mp_copy adalah sebagai berikut: Input : mp_int a dan mp_int b Output : b = a 1. If b.alloc a.used mp_grow b, a.used 2. For n from 0 to a.used b n a n 3. b.used a.used 4. b.alloc a.alloc 5 b.sign a.sign Algoritme fungsi mp_copy di atas menunjukkan bahwa fungsi tersebut akan memeriksa jumlah alokasi memori pada bilangan b terlebih dahulu. Jika alokasi memori pada b lebih kecil dari a, maka dilakukan proses penambahan alokasi memori pada b sampai sebanyak a.used. Selanjutnya semua variabel yang ada pada b diberikan nilai yang sama dengan a.

b. mp_zero

Fungsi mp_zero digunakan untuk memberikan nilai 0 pada bilangan mp_int. Algoritme fungsi mp_zero adalah sebagai berikut: Input : mp_int a Output : a = 0 1. a.used = 0 2. For n from 0 to a.used a n 3 a. sign MP_ZPOS

c. mp_cmp

Fungsi mp_cmp digunakan untuk membandingkan dua bilangan mp_int. Fungsi ini mempunyai tiga return value. Ketiga return value tersebut yaitu MP_LT -1 untuk menyatakan “lebih kecil”, MP_GT 1 untuk menyatakan “lebih besar”, dan M’P_EQ 0 untuk menyatakan “sama dengan”. Algoritme fungsi mp_cmp adalah sebagai berikut: Input : mp_int a dan mp_int b Output : nilai perbandingan antara |a| dan |b| 1. If a.used b.used Return MP_GT 2. Else if a.used b.used Return MP_LT 3. Else For n from a.used-1 to 0 If a n b n Return MP_GT Else if a n b n Return MP_LT Return MP_EQ Algoritme fungsi mp_cmp di atas menunjukkan bahwa fungsi tersebut akan membandingkan jumlah memori yang digunakan oleh a dan b . Jika memori yang digunakan a lebih banyak dari memori yang digunakan b, maka a b dan sebaliknya jika memori yang digunakan b lebih banyak dari memori yang digunakan a, maka a b. Jika memori yang digunakan keduanya sama, maka akan dibandingkan dari digit array paling signifikan antara keduanya. Jika semua nilai digit array sama, maka a = b. Librari dalam penelitian ini mempunyai beberapa operasi aritmatik dalam field prima. Operasi-operasi tersebut yaitu:

a. Penjumlahan

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

1. s_mp_add

Fungsi s_mp_add digunakan untuk melakukan proses penjumlahan dua bilangan mutlak mp_int. Algoritme yang digunakan seperti yang diajarkan di sekolah dasar. Fungsi ini melakukan proses penjumlahan antar digit array sebanyak n sehingga kompleksitasnya adalah On dengan n adalah banyaknya digit array. Algoritme fungsi s_mp_add adalah sebagai berikut: Input : mp_int a dan mp_int b Output : c = |a| + |b| 1. If a.used b.used min b.used max a.used x a 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: