Author: saces
Date: 2008-07-28 15:12:52 +0000 (Mon, 28 Jul 2008)
New Revision: 21449

Modified:
   trunk/freenet/src/freenet/pluginmanager/PluginDownLoader.java
   trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFile.java
   trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFreenet.java
   trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderOfficial.java
   trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderURL.java
   trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
add sha1 test for downloaded plugin

Modified: trunk/freenet/src/freenet/pluginmanager/PluginDownLoader.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginDownLoader.java       
2008-07-28 15:02:32 UTC (rev 21448)
+++ trunk/freenet/src/freenet/pluginmanager/PluginDownLoader.java       
2008-07-28 15:12:52 UTC (rev 21449)
@@ -29,5 +29,7 @@
        abstract T checkSource(String source) throws PluginNotFoundException;

        abstract String getPluginName(String source) throws 
PluginNotFoundException;
+       
+       abstract String getSHA1sum() throws PluginNotFoundException;

 }

Modified: trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFile.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFile.java   
2008-07-28 15:02:32 UTC (rev 21448)
+++ trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFile.java   
2008-07-28 15:12:52 UTC (rev 21449)
@@ -24,4 +24,9 @@
                return source.substring(source.lastIndexOf('/') + 1);
        }

+       @Override
+       String getSHA1sum() throws PluginNotFoundException {
+               return null;
+       }
+
 }

Modified: trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFreenet.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFreenet.java        
2008-07-28 15:02:32 UTC (rev 21448)
+++ trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFreenet.java        
2008-07-28 15:12:52 UTC (rev 21449)
@@ -46,4 +46,9 @@
                return source.substring(source.lastIndexOf('/') + 1);
        }

+       @Override
+       String getSHA1sum() throws PluginNotFoundException {
+               return null;
+       }
+
 }

Modified: trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderOfficial.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderOfficial.java       
2008-07-28 15:02:32 UTC (rev 21448)
+++ trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderOfficial.java       
2008-07-28 15:12:52 UTC (rev 21449)
@@ -8,7 +8,9 @@
 public class PluginDownLoaderOfficial extends PluginDownLoaderURL {

        public URL checkSource(String source) throws PluginNotFoundException {
+               // FIXME use the new uri
                return 
super.checkSource("http://downloads.freenetproject.org/alpha/plugins/"; + source 
+ ".jar.url");
+       //      return 
super.checkSource("https://checksums.freenetproject.org/latest/"; + source + 
".jar.url");
        }

        @Override
@@ -16,4 +18,9 @@
                return source;
        }

+       @Override
+       String getSHA1sum() throws PluginNotFoundException {
+               return null;
+       }
+
 }

Modified: trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderURL.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderURL.java    
2008-07-28 15:02:32 UTC (rev 21448)
+++ trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderURL.java    
2008-07-28 15:12:52 UTC (rev 21449)
@@ -40,4 +40,9 @@
                return name;
        }

+       @Override
+       String getSHA1sum() throws PluginNotFoundException {
+               return null;
+       }
+
 }

Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2008-07-28 
15:02:32 UTC (rev 21448)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2008-07-28 
15:12:52 UTC (rev 21449)
@@ -3,7 +3,10 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.pluginmanager;

+import java.io.BufferedInputStream;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -11,6 +14,8 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -35,6 +40,7 @@
 import freenet.node.Ticker;
 import freenet.node.useralerts.SimpleUserAlert;
 import freenet.node.useralerts.UserAlert;
+import freenet.support.HexUtil;
 import freenet.support.JarClassLoader;
 import freenet.support.Logger;
 import freenet.support.api.HTTPRequest;
@@ -629,6 +635,16 @@
                                                        Logger.error(this, 
"could not rename temp file to plugin file");
                                                        throw new 
PluginNotFoundException("could not rename temp file to plugin file");
                                                }
+                                               
+                                               String digest = 
pdl.getSHA1sum();
+                                               if (digest != null) {
+                                                       String testsum = 
getFileSHA1(pluginFile);
+                                                       if 
(!(digest.equalsIgnoreCase(testsum))) {
+                                                               
Logger.error(this, "Checksum verification failed, should be " +digest+ " but 
was " + testsum);
+                                                               throw new 
PluginNotFoundException("Checksum verification failed, should be " +digest+ " 
but was " + testsum);
+                                                       }
+                                               }
+                                               
                                        } catch (IOException ioe1) {
                                                Logger.error(this, "could not 
load plugin", ioe1);
                                                if (tempPluginFile != null) {
@@ -724,6 +740,32 @@
                }
        }

+       private String getFileSHA1(File file) throws PluginNotFoundException {
+               final int BUFFERSIZE = 4096;
+               MessageDigest hash = null;
+               FileInputStream fis = null;
+               BufferedInputStream bis = null;
+               
+               try {
+                       hash = MessageDigest.getInstance("SHA-1");
+                       // We compute the hash
+                       // 
http://java.sun.com/developer/TechTips/1998/tt0915.html#tip2
+                       fis = new FileInputStream(file);
+                       bis = new BufferedInputStream(fis);
+                       int len = 0;
+                       byte[] buffer = new byte[BUFFERSIZE];
+                       while((len = bis.read(buffer)) > -1) {
+                               hash.update(buffer, 0, len);
+                       }       
+               } catch (Exception e) {
+                       throw new PluginNotFoundException("Error while 
computing sha1 hash of the downloaded plugin: "+e, e);
+               } finally {
+                       Closer.close(bis);
+                       Closer.close(fis);
+               }
+               return HexUtil.bytesToHex(hash.digest());
+       }
+
        Ticker getTicker() {
                return node.getTicker();
        }


Reply via email to