the public API we deleted because the protocol had two sides
The library had a function that did the whole job. It drew its own seed, iterated until it found an answer, and returned the result. It was tested, documented, and the obvious thing for a caller to reach for.