Compression Function Design Principles Supporting Variable Output Lengths from a Single Small Function