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: