@sil pretty much all message digest algorithms work on a stream. It's often only silly implementations which require the blob as a whole.
Fundamentally a CRC / MD algorithm has n-bits of state which get mutated by a block of data.
Most message digests will perform a finalisation of the internal state to result in the final hash. But IIRC the result of the CRC is just the internal state.
@intrbiz for example Python hashlib objects have a copy() method - you can dupilcate the alogrithm state and hash diverging streams. However I don't know a way you can persist/serialise them. Pickle didn't work.
@sil otherwise just compute a merkle tree.