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));
}
/**