Name Description Size
builder.rs 25323
clubcard.rs block id 6318
equation.rs 4651
lib.rs **UNSTABLE / EXPERIMENTAL** Clubcard is a compact data-structure that solves the exact membership query problem. Given some universe of objects U, a subset R of U, and two hash functions defined on U (as described below), Clubcard outputs a compact encoding of the function `f : U -> {0, 1}` defined by `f(x) = 0 if and only if x ∈ R`. Clubcard is based on the Ribbon filters from - <https://arxiv.org/pdf/2103.02515>, and - <https://arxiv.org/pdf/2109.01892> And some ideas from Mike Hamburg's RWC 2022 talk - <https://rwc.iacr.org/2022/program.php#abstract-talk-39> - <https://youtu.be/Htms5rNy7B8?list=PLeeS-3Ml-rpovBDh6do693We_CP3KTnHU&t=2357> The construction will be described in detail in a forthcoming paper. At a high level, a clubcard is a pair of matrices (X, Y) defined over GF(2). The hash functions h and g map elements of U to vectors in the domain of X and Y respectively. The matrix X is a solution to `H * X = 0` where the rows of H are obtained by hashing the elements of R with h. The number of columns in X is floor(lg(|U\R| / |R|)). The matrix Y is a solution to `G * Y = C` where the rows of G are obtained by hashing, with g, the elements u ∈ U for which h(u) * X = 0. The matrix Y has one column. The rows of C encode membership in R. Given (X, Y) and an element u ∈ U, we have that u ∈ R iff h(u) * X == 0 and g(u) * Y = 0. Clubcard was developed to replace the use of Bloom cascades in CRLite. In a preliminary experiment using a real-world collection of 12.2M revoked certs and 789.2M non-revoked certs, the currently-deployed Bloom cascade implementation of CRLite produces a 19.8MB filter in 293 seconds (on a Ryzen 3975WX with 64GB of RAM). This Clubcard implementation produces an 8.5MB filter in 200 seconds. 2386
query.rs 2584