Author: nextgens
Date: 2008-05-06 04:31:24 +0000 (Tue, 06 May 2008)
New Revision: 19786

Modified:
   trunk/freenet/src/freenet/client/ArchiveManager.java
   trunk/freenet/src/freenet/node/NodeClientCore.java
   trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
   
trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucketFactory.java
   trunk/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
Log:
doh, we should use Yarrow in PaddedEphemerallyEncryptedBucket, at least when we 
generate the keys

Modified: trunk/freenet/src/freenet/client/ArchiveManager.java
===================================================================
--- trunk/freenet/src/freenet/client/ArchiveManager.java        2008-05-06 
02:06:43 UTC (rev 19785)
+++ trunk/freenet/src/freenet/client/ArchiveManager.java        2008-05-06 
04:31:24 UTC (rev 19786)
@@ -39,8 +39,8 @@
        public static final String METADATA_NAME = ".metadata";
        private static boolean logMINOR;

-       final RandomSource random;
-       final Random weakRandom;
+       final RandomSource strongPRNG;
+       final Random weakPRNG;
        final long maxArchiveSize;
        final long maxArchivedFileSize;

@@ -72,7 +72,8 @@
         * file extracted from an archive. It is stored, encrypted and padded, 
in a single
         * file.
         * @param cacheDir The directory in which to store cached data.
-        * @param random A random source for the encryption keys used by stored 
files.
+        * @param random A cryptographicaly secure random source
+        * @param weakRandom A weak and cheap random source
         */
        public ArchiveManager(int maxHandlers, long maxCachedData, long 
maxArchiveSize, long maxArchivedFileSize, int maxCachedElements, RandomSource 
random, Random weakRandom, FilenameGenerator filenameGenerator) {
                maxArchiveHandlers = maxHandlers;
@@ -82,8 +83,8 @@
                storedData = new LRUHashtable();
                this.maxArchiveSize = maxArchiveSize;
                this.maxArchivedFileSize = maxArchivedFileSize;
-               this.random = random;
-               this.weakRandom = weakRandom;
+               this.strongPRNG = random;
+               this.weakPRNG = weakRandom;
                this.filenameGenerator = filenameGenerator;
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
        }
@@ -475,8 +476,8 @@
                TempFileBucket fb = new TempFileBucket(id, filenameGenerator);

                byte[] cipherKey = new byte[32];
-               random.nextBytes(cipherKey);
-               PaddedEphemerallyEncryptedBucket encryptedBucket = new 
PaddedEphemerallyEncryptedBucket(fb, 1024, weakRandom);
+               strongPRNG.nextBytes(cipherKey);
+               PaddedEphemerallyEncryptedBucket encryptedBucket = new 
PaddedEphemerallyEncryptedBucket(fb, 1024, strongPRNG, weakPRNG);
                return new TempStoreElement(myFile, fb, encryptedBucket);
        }


Modified: trunk/freenet/src/freenet/node/NodeClientCore.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeClientCore.java  2008-05-06 02:06:43 UTC 
(rev 19785)
+++ trunk/freenet/src/freenet/node/NodeClientCore.java  2008-05-06 04:31:24 UTC 
(rev 19786)
@@ -190,14 +190,14 @@
                                        }
                });
                try {
-                       persistentTempBucketFactory = new 
PersistentTempBucketFactory(new 
File(nodeConfig.getString("persistentTempDir")), "freenet-temp-", 
node.fastWeakRandom);
+                       persistentTempBucketFactory = new 
PersistentTempBucketFactory(new 
File(nodeConfig.getString("persistentTempDir")), "freenet-temp-", random, 
node.fastWeakRandom);
                        persistentEncryptedTempBucketFactory = new 
PersistentEncryptedTempBucketFactory(persistentTempBucketFactory);
                } catch (IOException e2) {
                        String msg = "Could not find or create persistent 
temporary directory";
                        throw new 
NodeInitException(NodeInitException.EXIT_BAD_TEMP_DIR, msg);
                }

-               tempBucketFactory = new 
PaddedEphemerallyEncryptedBucketFactory(new 
TempBucketFactory(tempFilenameGenerator), node.fastWeakRandom, 1024);
+               tempBucketFactory = new 
PaddedEphemerallyEncryptedBucketFactory(new 
TempBucketFactory(tempFilenameGenerator), random, node.fastWeakRandom, 1024);

                // Downloads directory


Modified: 
trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java  
2008-05-06 02:06:43 UTC (rev 19785)
+++ trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java  
2008-05-06 04:31:24 UTC (rev 19786)
@@ -40,15 +40,16 @@
         * @param bucket The bucket which we are proxying to. Must be empty.
         * @param pcfb The encryption mode with which to encipher/decipher the 
data.
         * @param minSize The minimum padded size of the file (after it has 
been closed).
-        * @param origRandom a week prng we will padd from.
+        * @param strongPRNG a strong prng we will key from.
+        * @param weakPRNG a week prng we will padd from.
         * @throws UnsupportedCipherException 
         */
-       public PaddedEphemerallyEncryptedBucket(Bucket bucket, int minSize, 
Random origRandom) {
-               this.randomSource = origRandom;
+       public PaddedEphemerallyEncryptedBucket(Bucket bucket, int minSize, 
RandomSource strongPRNG, Random weakPRNG) {
+               this.randomSource = weakPRNG;
                this.bucket = bucket;
                if(bucket.size() != 0) throw new 
IllegalArgumentException("Bucket must be empty");
                byte[] tempKey = new byte[32];
-               origRandom.nextBytes(tempKey);
+               strongPRNG.nextBytes(tempKey);
                this.key = tempKey;
                this.minPaddedSize = minSize;
                readOnly = false;

Modified: 
trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucketFactory.java
===================================================================
--- 
trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucketFactory.java
   2008-05-06 02:06:43 UTC (rev 19785)
+++ 
trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucketFactory.java
   2008-05-06 04:31:24 UTC (rev 19786)
@@ -1,5 +1,6 @@
 package freenet.support.io;

+import freenet.crypt.RandomSource;
 import java.io.IOException;

 import freenet.support.api.Bucket;
@@ -13,16 +14,18 @@
 public class PaddedEphemerallyEncryptedBucketFactory implements BucketFactory {

        final BucketFactory baseFactory;
-       final Random random;
+       final RandomSource strongPRNG;
+       final Random weakPRNG;
        final int minSize;

-       public PaddedEphemerallyEncryptedBucketFactory(BucketFactory factory, 
Random r, int minSize) {
+       public PaddedEphemerallyEncryptedBucketFactory(BucketFactory factory, 
RandomSource strongPRNG, Random weakPRNG, int minSize) {
                baseFactory = factory;
                this.minSize = minSize;
-               this.random = r;
+               this.strongPRNG = strongPRNG;
+               this.weakPRNG = weakPRNG;
        }

        public Bucket makeBucket(long size) throws IOException {
-               return new 
PaddedEphemerallyEncryptedBucket(baseFactory.makeBucket(size), minSize, random);
+               return new 
PaddedEphemerallyEncryptedBucket(baseFactory.makeBucket(size), minSize, 
strongPRNG, weakPRNG);
        }
 }

Modified: trunk/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
===================================================================
--- trunk/freenet/src/freenet/support/io/PersistentTempBucketFactory.java       
2008-05-06 02:06:43 UTC (rev 19785)
+++ trunk/freenet/src/freenet/support/io/PersistentTempBucketFactory.java       
2008-05-06 04:31:24 UTC (rev 19786)
@@ -3,6 +3,7 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.support.io;

+import freenet.crypt.RandomSource;
 import java.io.File;
 import java.io.IOException;
 import java.util.HashSet;
@@ -35,16 +36,18 @@
        private final FilenameGenerator fg;

        /** Random number generator */
-       private final Random rand;
+       private final RandomSource strongPRNG;
+       private final Random weakPRNG;

        /** Buckets to free */
        private LinkedList bucketsToFree;

-       public PersistentTempBucketFactory(File dir, String prefix, Random 
rand) throws IOException {
+       public PersistentTempBucketFactory(File dir, String prefix, 
RandomSource strongPRNG, Random weakPRNG) throws IOException {
                boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
                this.dir = dir;
-               this.rand = rand;
-               this.fg = new FilenameGenerator(rand, false, dir, prefix);
+               this.strongPRNG = strongPRNG;
+               this.weakPRNG = weakPRNG;
+               this.fg = new FilenameGenerator(weakPRNG, false, dir, prefix);
                if(!dir.exists()) {
                        dir.mkdir();
                        if(!dir.exists()) {
@@ -106,12 +109,12 @@

        public Bucket makeBucket(long size) throws IOException {
                Bucket b = makeRawBucket(size);
-               return new DelayedFreeBucket(this, new 
PaddedEphemerallyEncryptedBucket(b, 1024, rand));
+               return new DelayedFreeBucket(this, new 
PaddedEphemerallyEncryptedBucket(b, 1024, strongPRNG, weakPRNG));
        }

        public Bucket makeEncryptedBucket() throws IOException {
                Bucket b = makeRawBucket(-1);
-               return new DelayedFreeBucket(this, new 
PaddedEphemerallyEncryptedBucket(b, 1024, rand));
+               return new DelayedFreeBucket(this, new 
PaddedEphemerallyEncryptedBucket(b, 1024, strongPRNG, weakPRNG));
        }

        /**


Reply via email to