gnu-crypto-discuss
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]