forked from I2P_Developers/i2p.i2p
2006-02-15 jrandom
* Merged in the i2p_0_6_1_10_PRE branch to the trunk, so CVS HEAD is no
longer backwards compatible (and should not be used until 0.6.1.1 is
out)
This commit is contained in:
@@ -148,14 +148,16 @@ public class BloomSHA1 {
|
||||
*
|
||||
* @param b byte array representing a key (SHA1 digest)
|
||||
*/
|
||||
public void insert (byte[]b) {
|
||||
public void insert (byte[]b) { insert(b, 0, b.length); }
|
||||
public void insert (byte[]b, int offset, int len) {
|
||||
synchronized(this) {
|
||||
locked_insert(b);
|
||||
}
|
||||
}
|
||||
|
||||
public final void locked_insert(byte[]b) {
|
||||
ks.getOffsets(b);
|
||||
public final void locked_insert(byte[]b) { locked_insert(b, 0, b.length); }
|
||||
public final void locked_insert(byte[]b, int offset, int len) {
|
||||
ks.getOffsets(b, offset, len);
|
||||
for (int i = 0; i < k; i++) {
|
||||
filter[wordOffset[i]] |= 1 << bitOffset[i];
|
||||
}
|
||||
@@ -168,8 +170,9 @@ public class BloomSHA1 {
|
||||
* @param b byte array representing a key (SHA1 digest)
|
||||
* @return true if b is in the filter
|
||||
*/
|
||||
protected final boolean isMember(byte[] b) {
|
||||
ks.getOffsets(b);
|
||||
protected final boolean isMember(byte[] b) { return isMember(b, 0, b.length); }
|
||||
protected final boolean isMember(byte[] b, int offset, int len) {
|
||||
ks.getOffsets(b, offset, len);
|
||||
for (int i = 0; i < k; i++) {
|
||||
if (! ((filter[wordOffset[i]] & (1 << bitOffset[i])) != 0) ) {
|
||||
return false;
|
||||
@@ -179,6 +182,7 @@ public class BloomSHA1 {
|
||||
}
|
||||
|
||||
public final boolean locked_member(byte[]b) { return isMember(b); }
|
||||
public final boolean locked_member(byte[]b, int offset, int len) { return isMember(b, offset, len); }
|
||||
|
||||
/**
|
||||
* Is a key in the filter. External interface, internally synchronized.
|
||||
@@ -186,9 +190,10 @@ public class BloomSHA1 {
|
||||
* @param b byte array representing a key (SHA1 digest)
|
||||
* @return true if b is in the filter
|
||||
*/
|
||||
public final boolean member(byte[]b) {
|
||||
public final boolean member(byte[]b) { return member(b, 0, b.length); }
|
||||
public final boolean member(byte[]b, int offset, int len) {
|
||||
synchronized (this) {
|
||||
return isMember(b);
|
||||
return isMember(b, offset, len);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ public class KeySelector {
|
||||
private int m;
|
||||
private int k;
|
||||
private byte[] b;
|
||||
private int offset; // index into b to select
|
||||
private int length; // length into b to select
|
||||
private int[] bitOffset;
|
||||
private int[] wordOffset;
|
||||
private BitSelector bitSel;
|
||||
@@ -70,7 +72,7 @@ public class KeySelector {
|
||||
public class GenericBitSelector implements BitSelector {
|
||||
/** Do the extraction */
|
||||
public void getBitSelectors() {
|
||||
int curBit = 0;
|
||||
int curBit = 8 * offset;
|
||||
int curByte;
|
||||
for (int j = 0; j < k; j++) {
|
||||
curByte = curBit / 8;
|
||||
@@ -126,7 +128,7 @@ public class KeySelector {
|
||||
public void getWordSelectors() {
|
||||
int stride = m - 5;
|
||||
//assert true: stride<16;
|
||||
int curBit = k * 5;
|
||||
int curBit = (k * 5) + (offset * 8);
|
||||
int curByte;
|
||||
for (int j = 0; j < k; j++) {
|
||||
curByte = curBit / 8;
|
||||
@@ -216,15 +218,18 @@ public class KeySelector {
|
||||
*
|
||||
* @param key cryptographic key used in populating the arrays
|
||||
*/
|
||||
public void getOffsets (byte[] key) {
|
||||
public void getOffsets (byte[] key) { getOffsets(key, 0, key.length); }
|
||||
public void getOffsets (byte[] key, int off, int len) {
|
||||
if (key == null) {
|
||||
throw new IllegalArgumentException("null key");
|
||||
}
|
||||
if (key.length < 20) {
|
||||
if (len < 20) {
|
||||
throw new IllegalArgumentException(
|
||||
"key must be at least 20 bytes long");
|
||||
}
|
||||
b = key;
|
||||
offset = off;
|
||||
length = len;
|
||||
// // DEBUG
|
||||
// System.out.println("KeySelector.getOffsets for "
|
||||
// + BloomSHA1.keyToString(b));
|
||||
|
||||
Reference in New Issue
Block a user