org.xlattice.crypto.filters
public class KeySelector extends Object
Modifier and Type | Class and Description |
---|---|
static interface |
KeySelector.BitSelector |
class |
KeySelector.GenericBitSelector
Extracts the k bit offsets from a key, suitable for general values
of m and k.
|
class |
KeySelector.GenericWordSelector
Extracts the k word offsets from a key.
|
static interface |
KeySelector.WordSelector |
Modifier and Type | Field and Description |
---|---|
static int[] |
MASK
AND with byte to zero out index-many bits
|
static int |
TWO_UP_15 |
static int[] |
UNMASK
AND with byte to expose index-many bits
|
Constructor and Description |
---|
KeySelector(int m,
int k,
int[] bitOffset,
int[] wordOffset)
Creates a key selector for a Bloom filter.
|
Modifier and Type | Method and Description |
---|---|
(package private) String |
btoh(byte b) |
void |
getOffsets(byte[] key)
Given a key, populate the word and bit offset arrays, each
of which has k elements.
|
void |
getOffsets(byte[] key,
int off,
int len) |
(package private) String |
itoh(int i) |
public static final int[] UNMASK
public static final int[] MASK
public static final int TWO_UP_15
public KeySelector(int m, int k, int[] bitOffset, int[] wordOffset)
m
- size of the filter as a power of 2k
- number of 'hash functions'bitOffset
- array of k bit offsets (offset of flag bit in word)wordOffset
- array of k word offsets (offset of word flag is in)
Note that if k and m are too big, the GenericWordSelector blows up -
The max for 32-byte keys is m=23 and k=11.
The precise restriction appears to be:
((5k + (k-1)(m-5)) / 8) + 2 < keySizeInBytes
It isn't clear how to fix this.public void getOffsets(byte[] key)
key
- cryptographic key used in populating the arrayspublic void getOffsets(byte[] key, int off, int len)
String itoh(int i)
String btoh(byte b)