[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNU Crypto] Problems using Asyncron encryption...
From: |
per-anders.borufsen |
Subject: |
[GNU Crypto] Problems using Asyncron encryption... |
Date: |
Mon, 29 Mar 2004 10:14:31 +0200 |
Hi :)
I am trying too use Diffie-Hellman key agreement protocols. How ever, I cant
seem to get it to work when using 2 different applications. It is like some
parameter is missing... I am wondering if there is a bug or some parameter I
am nor getting right... I hope somebody here might know what's wrong...
Server code:
import gnu.crypto.key.*;
import gnu.crypto.*;
import gnu.*;
import gnu.crypto.key.IncomingMessage;
import gnu.crypto.key.OutgoingMessage;
import gnu.crypto.key.dh.*;
import gnu.crypto.key.BaseKeyAgreementParty;
import java.util.*;
import java.security.*;
import java.net.*;
import java.io.*;
class async_server{
public static void print(byte[] b){
long sum=0;
for (int i=0;i<b.length;i++){
System.out.print(b[i]);
sum=sum+b[i];
}
System.out.print("Sjekksum: "+sum);
}
public static void main(String[] args){
int port=5050;
try{
ServerSocket ss=new ServerSocket(port);
System.out.print("Lytter port 5050");
Socket s=ss.accept();
DataOutputStream sout=new DataOutputStream(s.getOutputStream());
DataInputStream sin=new DataInputStream(s.getInputStream());
IKeyPairGenerator kpg =
KeyPairGeneratorFactory.getInstance(Registry.DH_KPG);
kpg.setup(new HashMap()); // use default values
KeyPair kpA = kpg.generate();
IKeyAgreementParty A = new DiffieHellmanSender();
Map mapA = new HashMap();
mapA.put(DiffieHellmanKeyAgreement.KA_DIFFIE_HELLMAN_OWNER_PRIVATE_KEY,
kpA.getPrivate());
A.init(mapA);
System.out.println("Server = A");
// (1) A -> B: g**x mod p
OutgoingMessage out = A.processMessage(null);
byte [] keyBytes=out.toByteArray();
System.out.println("A: Sender out til B(a->b)");
sout.writeInt(keyBytes.length);
sout.write(keyBytes);
// System.out.print("A: skrev '");
// print(keyBytes);
// System.out.println("'");
java.lang.Thread.sleep(20);
// A computes the shared secret
System.out.println("A: Leser fra b");
byte[] keyBytes2=new byte[sin.readInt()];
java.lang.Thread.sleep(10);
sin.readFully(keyBytes2);
// System.out.print("A: B skrev til a'");
// print(keyBytes2);
// System.out.println("'");
out = A.processMessage(new IncomingMessage(keyBytes2));
System.out.println("A computes secret key!");
System.out.println("Status:"+A.isComplete() );
byte[] k1 = A.getSharedSecret();
System.out.print("A: Secret key:'");
print(k1);
System.out.println("'");
}catch (gnu.crypto.key.KeyAgreementException e){
System.out.println(e);
}catch (java.io.IOException e){
System.out.println(e);
}catch(java.lang.InterruptedException e){
System.out.println(e);
}
}
}
And the Client code:
import gnu.crypto.key.*;
import gnu.crypto.*;
import gnu.*;
import gnu.crypto.key.IncomingMessage;
import gnu.crypto.key.OutgoingMessage;
import gnu.crypto.key.dh.*;
import gnu.crypto.key.BaseKeyAgreementParty;
import java.util.*;
import java.security.*;
import java.net.*;
import java.io.*;
class async_client{
public static void print(byte[] b){
long sum=0;
for (int i=0;i<b.length;i++){
System.out.print(b[i]);
sum=sum+b[i];
}
System.out.print("Sjekksum: "+sum);
}
public static void main(String[] args){
int port=5050;
try{
Socket s=new Socket("127.0.0.1",port);
System.out.print("Connecter port 5050");
DataOutputStream sout=new DataOutputStream(s.getOutputStream());
DataInputStream sin=new DataInputStream(s.getInputStream());
IKeyPairGenerator kpg =
KeyPairGeneratorFactory.getInstance(Registry.DH_KPG);
kpg.setup(new HashMap()); // use default values
//KeyPair kpA = kpg.generate();
KeyPair kpB = kpg.generate();
//IKeyAgreementParty A = new DiffieHellmanSender();
IKeyAgreementParty B = new DiffieHellmanReceiver();
//Map mapA = new HashMap();
//mapA.put(DiffieHellmanKeyAgreement.KA_DIFFIE_HELLMAN_OWNER_PRIVATE_KEY,
// kpA.getPrivate());
Map mapB = new HashMap();
mapB.put(DiffieHellmanKeyAgreement.KA_DIFFIE_HELLMAN_OWNER_PRIVATE_KEY,
kpB.getPrivate());
//A.init(mapA);
B.init(mapB);
System.out.println("Klient = B");
// (1) A -> B: g**x mod p
OutgoingMessage out = null;
System.out.println("B: Leser fra a");
byte[] keyBytes=new byte[sin.readInt()];
java.lang.Thread.sleep(5);
sin.readFully(keyBytes);
//System.out.print("B: A skrev '");
//print(keyBytes);
//System.out.println("'");
// (2) B -> A: g^^y mod p
out = B.processMessage(new IncomingMessage(keyBytes));
System.out.println("Beregner B's hemmlige!");
System.out.println("Status:"+B.isComplete() );
byte[] k2 = B.getSharedSecret();
// A computes the shared secret
System.out.println("B: Skriver til A");
byte [] keyBytes2=out.toByteArray();
sout.writeInt(keyBytes2.length);
sout.write(keyBytes2);
java.lang.Thread.sleep(20);
//System.out.print("B: skrev til a'");
//print(keyBytes2);
//System.out.println("'");
//out = A.processMessage(new IncomingMessage(keyBytes2));
//byte[] k1 = A.getSharedSecret();
//System.out.print("A: '");
//print(k1);
//System.out.println("'");
System.out.print("B: Secret key: '");
print(k2);
System.out.println("'");
}catch (gnu.crypto.key.KeyAgreementException e){
System.out.println(e);
}catch (java.io.IOException e){
System.out.println(e);
}catch(java.lang.InterruptedException e){
System.out.println(e);
}
}
}
Kind regards,
Per Anders
- [GNU Crypto] Problems using Asyncron encryption...,
per-anders.borufsen <=