Extracting with a sampled linear hash #
The extractor samples a fresh Boolean matrix and returns its complete seed followed by the digest. Its exact law is the finite strong-extraction experiment. Arbitrary randomized tests of the word output satisfy the leftover-hash bound; tests may inspect both seed and digest and need not be efficient. This uses the upstream finite-PMF distance without a competing metric on the infinite type of lists. Uniform strict PPT is certified separately.
Main definitions #
Cslib.BitString.LinearHash.extract: sample and reveal a matrix and its hash output.
Main results #
Cslib.BitString.LinearHash.eval_extract_bind: the complete finite-to-list joint law.Cslib.BitString.LinearHash.eval_extract_replicate: extraction from concatenated repeated runs.Cslib.BitString.LinearHash.extract_dist_bind_le: leftover hashing for every randomized test with a finite result type, including arbitrary Boolean distinguishers.
References #
- T. Holenstein, Pseudorandom Generators from One-Way Functions: A Simple Construction for Any Hardness, Section 3.3, Lemma 1.
- I. Haitner, S. Vadhan, The Many Entropies in One-Way Functions, Section 2.4.1, Definition 4 and Lemma 8.
Adapted from Languages/Probabilistic/LinearHash.lean on the cslib crypto branch at
5ff69ca93402e7c947208dc56396d6d86203ccd8, using the existing block and finite-distance APIs.
The word extractor agrees exactly with the finite strong-extraction experiment.
Hashing concatenated independent fixed-width words has the tuple extraction law.
Every randomized finite-output test of the complete word output satisfies the strong leftover-hash bound. The test has no computational restriction and sees the public seed.