Evaluating the GGM tree #
Starting from a secret root label, follow the query bits down a binary tree. Each expansion provides two labels of the current seed width. The evaluator is an ordinary word fold, and its polynomial-time certificate comes from the fold compiler.
Extra generator output is discarded. In particular, a generator of length 2 * n + 1 supplies
both n-bit children even at n = 0, where the result is the empty word.
This module proves evaluation and size properties. Pseudorandomness requires the adaptive oracle hybrid argument in addition to these facts.
The functional construction is ported from the cslib crypto branch at
5ff69ca93402e7c947208dc56396d6d86203ccd8; efficiency uses the existing tidy machine calculus.
Main definitions #
Cslib.Crypto.GGM.eval: evaluate a binary query by folding child selection over its bits.
Main results #
Cslib.Crypto.GGM.length_eval: evaluation preserves the seed width for full expansions.Cslib.Crypto.GGM.computableTidilyInPolyTime_eval: a uniform machine certificate without a cryptographic security hypothesis or an output-length hypothesis on the generator.
References #
Each child fits in the declared width, even when the expansion is short.
Child selection inspects only the first two labels.
Select a child using a computed unary width and ordinary bit-string slicing.
Computing one child invokes the certified generator and slices its output.
The GGM evaluator is polynomial time whenever its generator is. Its fold has no state growth, so this certificate needs no security or output-length assumption.