Changeset 125


Ignore:
Timestamp:
Nov 18, 2012 8:32:49 PM (5 years ago)
Author:
psaiteja
Message:

test - after adding signature checking on hash entries received by server

File:
1 edited

Legend:

Unmodified
Added
Removed
  • VSNClient/appClientModule/ClientProxy.java

    r123 r125  
    44import java.util.*; 
    55import java.security.*; 
     6import java.security.spec.*; 
    67import java.sql.Connection; 
    78import java.sql.DatabaseMetaData; 
     
    3233        private int UDPport = DEFAULT_UDP_PORT; 
    3334        private UDPClientThread udpthread; 
     35        PublicKey publickey = null; 
    3436         
    3537        /* here's a main method, in case you want to run this by itself */ 
     
    7476                ClientProxy cp = new ClientProxy(port, fProxyServer, fProxyPort, 5,uport, fUdpPort); 
    7577                //cp.setDebug(1, debugOut);             // or set the debug level to 2 for tons of output 
     78                try{ 
     79                        String path = ClientProxy.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 
     80                        path = URLDecoder.decode(path, "UTF-8"); 
     81                        System.out.println(path); 
     82                        cp.publickey = cp.LoadPublicKey(path,"DSA"); 
     83                        System.out.println("Got the server's public key"); 
     84                }catch(Exception e){ 
     85                        System.out.println("Unable to read server's public key"); 
     86                } 
    7687                cp.start(); 
    7788                 
     
    141152        } 
    142153         
     154        public PublicKey LoadPublicKey(String path, String algorithm) 
     155                        throws IOException, NoSuchAlgorithmException, 
     156                        InvalidKeySpecException { 
     157                // Read Public Key. 
     158                File filePublicKey = new File(path + "/public.key"); 
     159                FileInputStream fis = new FileInputStream(path + "/public.key"); 
     160                byte[] encodedPublicKey = new byte[(int) filePublicKey.length()]; 
     161                fis.read(encodedPublicKey); 
     162                fis.close(); 
     163  
     164                // Generate KeyPair. 
     165                KeyFactory keyFactory = KeyFactory.getInstance(algorithm); 
     166                X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec( 
     167                                encodedPublicKey); 
     168                PublicKey publicKey = keyFactory.generatePublic(publicKeySpec); 
     169                return publicKey; 
     170        } 
    143171         
    144172        /* allow the user to decide whether or not to send debug 
     
    239267                        } 
    240268                          
    241                         udpthread = new UDPClientThread(UDPport, fwdUDPport, fwdServer, conn, debugOut); 
     269                        udpthread = new UDPClientThread(UDPport, fwdUDPport, fwdServer, conn, debugOut, publickey); 
    242270                        udpthread.start(); 
    243271                         
     
    277305        private PrintStream debugOut; 
    278306        private DatagramSocket UDPClient = null; 
    279          
     307        private PublicKey publickey = null; 
    280308        private Timer timer; 
    281309         
    282         public UDPClientThread(int port, int fwdport, String fwd_server, Connection conn, PrintStream debug){ 
     310        public UDPClientThread(int port, int fwdport, String fwd_server, Connection conn, PrintStream debug, PublicKey pbkey){ 
    283311                UDPport = port; 
    284312                database_conn = conn; 
     
    286314                fwdServer = fwd_server; 
    287315                debugOut = debug; 
     316                publickey = pbkey; 
    288317                try{ 
    289318                        UDPClient = new DatagramSocket(UDPport); 
     
    356385                                         
    357386                                        String [] data_array = data.split("\n"); 
     387                                        String signature = data_array[0]; 
     388                                        String signdata = ""; 
     389                                        for(int i=1;i<data_array.length;i++){ 
     390                                                if(data_array[i].length()>0) 
     391                                                        signdata +=data_array[i]+"\n"; 
     392                                        } 
    358393                                         
    359                                         for(int i=0;i<data_array.length;i++){ 
     394                                         
     395                                    try{ 
     396                                        Signature signer = Signature.getInstance("SHA1withDSA"); 
     397                                            signer.initVerify(publickey); 
     398                                            signer.update(signdata.getBytes()); 
     399                                             
     400                                            if(!signer.verify(signature.getBytes())){ 
     401                                                System.out.println("Signature did not match - not processing UDP data"); 
     402                                                continue; 
     403                                            } 
     404                                    }catch(Exception e){ 
     405                                        System.out.println("NoSuchAlgorithm/invalidkey/Signature Exception"); 
     406                                        continue; 
     407                                    } 
     408                                     
     409                                        for(int i=1;i<data_array.length;i++){ 
    360410                                                if(data_array[i].length()>0){ 
    361411                                                        if(data_array[i].indexOf("\t")<0) 
Note: See TracChangeset for help on using the changeset viewer.