Beruflich Dokumente
Kultur Dokumente
LISTING PROGRAM
GenerateKey.java
package com.example.kygoo.schnorrdigitalsignature;
import android.app.Dialog;
import android.content.Context;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.kygoo.schnorrdigitalsignature.algoritma.AKS;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
Button btn_generate;
Button btn_simpan;
EditText txt_p;
EditText txt_q;
EditText txt_a;
EditText txt_y;
EditText txt_d;
EditText txt_save;
TextView txt_waktu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.generate_key);
btn_generate.setOnClickListener(new View.OnClickListener() {
A-
2
@Override
public void onClick(View v) {
final long startTime = System.nanoTime();
String number = "1";
BigInteger numb = new BigInteger(number);
AKS aks = new AKS(numb);
//Log.d("aks",String.valueOf(aks.checkIsPrime(numb)));
//public key "p"
BigInteger p=BigInteger.valueOf(0);
BigInteger nilai=BigInteger.valueOf(0);
BigInteger q=BigInteger.valueOf(0);
BigInteger qp=BigInteger.valueOf(0);
int i=0;
qp = new BigInteger(blp-blq,sr);
do {
p =
q.multiply(qp).multiply(BigInteger.valueOf(2)).add(BigInteger.ONE);
if (aks.checkIsPrime(p)) break;
qp = qp.nextProbablePrime();
i++;
} while (true);
System.out.println("loop = "+i);
System.out.println("p = "+p);
i=0;
nilai=p;
txt_p.setText(nilai.toString());
txt_q.setText(q.toString());
//private key
long n = 2 + (int) (Math.random() * nilai.longValue()-2) ;
BigInteger privatkey;
A-
3
privatkey = BigInteger.valueOf(n);
txt_d.setText(privatkey.toString());
}
});
btn_simpan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String Kunci ="";
//String namafile = "";
//txt_save.setText(namafile);
Kunci=txt_p.getText()+"#"+txt_q.getText()+"#"+txt_a.getText()+"#"+txt_y.getTe
xt()+"#"+txt_d.getText();
writeToFile(getApplicationContext(),txt_save.getText().toString(),Kunci);
}
});
}
AKS.java
package com.example.kygoo.schnorrdigitalsignature.algoritma;
/**
A-
4
import java.math.*;
import java.io.*;
/***************************************************************************
* Team
**************
* Arijit Banerjee
* Suchit Maindola
* Srikanth Manikarnike
*
**************
* This is am implementation of Agrawal–Kayal–Saxena primality test in java.
*
**************
* The algorithm is -
* 1. l <- log n
* 2. for i<-2 to l
* a. if an is a power fo l
* return COMPOSITE
* 3. r <- 2
* 4. while r < n
* a. if gcd( r, n) != 1
* return COMPSITE
* b. if sieve marked n as PRIME
* q <- largest factor (r-1)
* o < - r-1 / q
* k <- 4*sqrt(r) * l
* if q > k and n <= r
* return PRIME
* c. x = 2
* d. for a <- 1 to k
* if (x + a) ^n != x^n + mod (x^r - 1, n)
* return COMPOSITE
* e. return PRIME
*/
/* aks constructor */
public AKS(BigInteger input)
{
sieveEratos();
if( result)
{
System.out.println("1");
}
else
{
System.out.println("0");
}
}
/*function that computes the log of a big number input in string format*/
public double logBigNum(String str)
{
String s;
int len;
A-
6
}
m = m.subtract(BigInteger.ONE);
p = (p.multiply(z)).mod(n);
}
return p;
}
Bacafile.java
package com.example.kygoo.schnorrdigitalsignature.algoritma;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
/**
* Created by kygoo on 6/6/2017.
*/
"fileasal");
Log.d("path", file.toString());
try {
fis = new FileInputStream(file);
int content;
while ((content = fis.read()) != -1) {
// convert to char and display it
baca += String.valueOf((char) content);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null)
fis.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
return baca;
}
Hash.java
package com.example.kygoo.schnorrdigitalsignature.algoritma;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
/**
* Created by kygoo on 6/6/2017.
*/
try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(pesan.getBytes());
crypt.update(key.getBytes());
sha1 = crypt.digest();
}
catch(NoSuchAlgorithmException e) {
e.printStackTrace();
}
return sha1;
}
Sign.java
package com.example.kygoo.schnorrdigitalsignature;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.kygoo.schnorrdigitalsignature.algoritma.Hash;
import com.example.kygoo.schnorrdigitalsignature.algoritma.bacafile;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigInteger;
Button btn_import;
Button btn_load;
Button btn_sign;
Button btn_simpan;
A-
11
EditText txt_input;
EditText txt_p;
EditText txt_q;
EditText txt_a;
EditText txt_y;
EditText txt_d;
EditText txt_e;
EditText txt_s;
EditText txt_save;
TextView txt_waktu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sign);
//baca file
btn_import.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn_load.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
});
btn_sign.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final long startTime = System.nanoTime();
//deklarasi variabel
if
(txt_p.getText().toString()==""||txt_q.getText().toString()==""){
Toast.makeText(getApplicationContext(), "inputan tidak
A-
12
valid", Toast.LENGTH_SHORT).show();
}else{
BigInteger k, r, s, e, p, q, a, d;
p = new BigInteger(txt_p.getText().toString());
q = new BigInteger(txt_q.getText().toString());
a = new BigInteger(txt_a.getText().toString());
d = new BigInteger(txt_d.getText().toString());
k =new BigInteger(String.valueOf(1 + (int) (Math.random() *
q.intValue())));//random bilangan 1<k<q-1
//String nu = "143";
//BigInteger key = new BigInteger(nu);
//e=h(m,r);
byte [] sha1 = Hash.hashsignature(pesan,r.toString()); //key
diganti r
txt_e.setText(new BigInteger(1,sha1).toString());
//ttd
e = new BigInteger(1, sha1);
s = (k.add(d.multiply(e))).mod(q);// s=(k+d x e).mod q;
txt_s.setText(s.toString());
}
final long duration = System.nanoTime() - startTime;
String time = Long.toString(duration);
txt_waktu.setText("Running time : "+time+" ns");
}
});
btn_simpan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String ttd ="";
//String namafile = "";
//txt_save.setText(namafile);
ttd=txt_e.getText()+"#"+txt_s.getText();
writeToFile(getApplicationContext(),txt_save.getText().toString(),ttd);
}
});
Uri.parse(Environment.getExternalStorageDirectory().getPath());
intent.setDataAndType(uri, "text/plain");
startActivityForResult(Intent.createChooser(intent, "Open folder"),2);
}
if (req == 1) {
Uri uri = data.getData();
String baca = bacafile.BacaPlain(uri.getPath().toString());
txt_input.setText(baca);
} else {
Uri uri = data.getData();
String baca = bacafile.BacaPlain(uri.getPath().toString());
String[] kunci = baca.split("#");
txt_p.setText(kunci[0]);
txt_q.setText(kunci[1]);
txt_a.setText(kunci[2]);
txt_y.setText(kunci[3]);
txt_d.setText(kunci[4]);
}
}
Verify.java
package com.example.kygoo.schnorrdigitalsignature;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
A-
14
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.kygoo.schnorrdigitalsignature.algoritma.Hash;
import com.example.kygoo.schnorrdigitalsignature.algoritma.bacafile;
import java.math.BigInteger;
Button btn_import;
Button btn_load;
Button btn_loadsign;
Button btn_verifikasi;
EditText txt_input;
EditText txt_p;
EditText txt_q;
EditText txt_a;
EditText txt_y;
EditText txt_d;
EditText txt_e;
EditText txt_s;
TextView txt_waktu;
TextView txt_status;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.verify);
//baca file
btn_import.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn_load.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
openkunci();
}
A-
15
});
btn_loadsign.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
opensign();
}
});
btn_verifikasi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final long startTime = System.nanoTime();
//deklarasi variabel
BigInteger s, e, p, q, a, y, d, as, ye, ye2, ve, e1;
p = new BigInteger(txt_p.getText().toString());
q = new BigInteger(txt_q.getText().toString());
a = new BigInteger(txt_a.getText().toString());
y = new BigInteger(txt_y.getText().toString());
d = new BigInteger(txt_d.getText().toString());
s = new BigInteger(txt_s.getText().toString());
e = new BigInteger(txt_e.getText().toString());
Uri.parse(Environment.getExternalStorageDirectory().getPath());
intent.setDataAndType(uri, "text/plain");
startActivityForResult(Intent.createChooser(intent, "Open folder"),1);
}
if (req == 1) {
Uri uri = data.getData();
String baca = bacafile.BacaPlain(uri.getPath().toString());
txt_input.setText(baca);
}else if (req == 3){
Uri uri = data.getData();
String baca = bacafile.BacaPlain(uri.getPath().toString());
String[] sign = baca.split("#");
txt_e.setText(sign[0]);
txt_s.setText(sign[1]);
}else
{
Uri uri = data.getData();
String baca = bacafile.BacaPlain(uri.getPath().toString());
String[] kunci = baca.split("#");
txt_p.setText(kunci[0]);
txt_q.setText(kunci[1]);
txt_a.setText(kunci[2]);
txt_y.setText(kunci[3]);
txt_d.setText(kunci[4]);
}
}
}