FileUtil.removeAll(f);
final int keys = 5;
PubkeyStore pk = new PubkeyStore();
new RAMFreenetStore<DSAPublicKey>(pk, keys);
GetPubkey pubkeyCache = new SimpleGetPubkey(pk);
SSKStore store = new SSKStore(pubkeyCache);
SaltedHashFreenetStore<SSKBlock> saltStore = SaltedHashFreenetStore.construct(f, "testSaltedHashFreenetStoreOnCloseSSK", store, weakPRNG, 10, true, SemiOrderedShutdownHook.get(), true, true, ticker, null);
saltStore.start(null, true);
RandomSource random = new DummyRandomSource(12345);
final int CRYPTO_KEY_LENGTH = 32;
byte[] ckey = new byte[CRYPTO_KEY_LENGTH];
random.nextBytes(ckey);
DSAGroup g = Global.DSAgroupBigA;
DSAPrivateKey privKey = new DSAPrivateKey(g, random);
DSAPublicKey pubKey = new DSAPublicKey(g, privKey);
byte[] pkHash = SHA256.digest(pubKey.asBytes());
String docName = "myDOC";
InsertableClientSSK ik = new InsertableClientSSK(docName, pkHash, pubKey, privKey, ckey, Key.ALGO_AES_PCFB_256_SHA256);
String test = "test";
SimpleReadOnlyArrayBucket bucket = new SimpleReadOnlyArrayBucket(test.getBytes("UTF-8"));
ClientSSKBlock block = ik.encode(bucket, false, false, (short)-1, bucket.size(), random, Compressor.DEFAULT_COMPRESSORDESCRIPTOR, false);
SSKBlock sskBlock = (SSKBlock) block.getBlock();
store.put(sskBlock, false, false);
//If the block is the same then there should not be a collision
try {
store.put(sskBlock, false, false);
assertTrue(true);
} catch (KeyCollisionException e) {
assertTrue(false);
}
String test1 = "test1";
SimpleReadOnlyArrayBucket bucket1 = new SimpleReadOnlyArrayBucket(test1.getBytes("UTF-8"));
ClientSSKBlock block1 = ik.encode(bucket1, false, false, (short)-1, bucket1.size(), random, Compressor.DEFAULT_COMPRESSORDESCRIPTOR, false);
SSKBlock sskBlock1 = (SSKBlock) block1.getBlock();
//if it's different (e.g. different content, same key), there should be a KCE thrown
try {
store.put(sskBlock1, false, false);
assertTrue(false);
} catch (KeyCollisionException e) {
assertTrue(true);
}
// if overwrite is set, then no collision should be thrown
try {
store.put(sskBlock1, true, false);
assertTrue(true);
} catch (KeyCollisionException e) {
assertTrue(false);
}
ClientSSK key = block1.getClientKey();
pubkeyCache.cacheKey(sskBlock.getKey().getPubKeyHash(), sskBlock.getKey().getPubKey(), false, false, false, false, false);
// Check that it's in the cache, *not* the underlying store.
NodeSSK ssk = (NodeSSK) key.getNodeKey();
SSKBlock verify = store.fetch(ssk, false, false, false, false, null);
String data = decodeBlockSSK(verify, key);
assertEquals(test1, data);