I think I see now the cause for this confusion. Let me put it simply:
generation signature is not block signature
generation signature = hash(generation signature of previous block concatenated with the forger's public key)
block signature = signature of block; forger's private key required
purpose of generation signature => providing the hit
purpose of block signature => providing block integrity
You still aren't understanding me. You have to get lucky and be allocated a block randomly as per normal. Now you get the chance to create a block signature. Once you get this opportunity you can iterate through many different possibilities for the block signature such that the next block is guaranteed to be signed by you.
The crucial bit of the code is hash(generation signature of previous block concatenated with the forger's public key). If you are able to manipulate the signature of the previous block because you were randomly allocated the ability to sign the previous block then you can make sure this hash is very small.