On Sunday 04 May 2008 14:11, you wrote: > Author: j16sdiz > Date: 2008-05-04 13:11:55 +0000 (Sun, 04 May 2008) > New Revision: 19733 > > Added: > branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java > Log: > SaltedHashFreenetStore basic function (without locking/resizing) > > > Added: branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java > =================================================================== > --- branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java (rev 0) > +++ branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java 2008-05-04 13:11:55 UTC (rev 19733) > + > + public StorableBlock getStorableBlock(byte[] routingKey, byte[] > fullKey) throws KeyVerifyException { > + if (!decrypt(routingKey)) > + return null; > + > + StorableBlock block = callback.construct(data, header, > routingKey, fullKey); > + byte[] blockRoutingKey = block.getRoutingKey(); > + > + if (!Arrays.equals(blockRoutingKey, routingKey)) { > + // either the data is corrupted or we have > found a SHA-1 collision > + // can't recover, as decrypt() depends on a > correct route key > + return null; > + } > + > + return block; > + }
If we can't be sure that the Entry isn't re-encrypted, we should copy the data/headers here. If we can, we should document it. > + > + /** > + * Check if a block is free > + * > + * @param offset > + * @throws IOException > + */ > + private boolean isFree(long offset) throws IOException { > + int split = (int) (offset % FILE_SPLIT); > + long rawOffset = (offset / FILE_SPLIT) * entryTotalLength; > + > + ByteBuffer bf = ByteBuffer.allocate((int) ENTRY_HEADER_LENGTH); > + > + do { > + int status = storeFC[split].write(bf, rawOffset + > bf.position()); > + if (status == -1) > + throw new EOFException(); > + } while (bf.hasRemaining()); > + > + return (bf.getLong(0x30) & ENTRY_FLAG_OCCUPIED) == 0; > + } Why read the whole entry just to check one byte (or one long)? -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: not available URL: <https://emu.freenetproject.org/pipermail/devl/attachments/20080509/a2343b41/attachment.pgp>