fix the SHA-1 hasher for large binary blobs

According to the [Rusha project](https://github.com/srijs/rusha), CryptoJS is broken for large and binary data. This PR replaces it with Rusha's implementation, which is also supposed to be faster.

(I'm concerned about CryptoJS's MD5 implementation too, but we can investigate that separately.)

Instead of this cycle, you could do:
outBuf.set(new Uint8Array(hash.buffer), outOff)