This is a nice writeup on length-extension attacks, although I wish it had placed the takeaway further up: `H(s || m)` is almost always the wrong signature construction, even if the hashing function itself doesn't enable length extension attacks. You almost always want an HMAC.