storage: download integrity check

- [x] integrity tests
- [x] merge #299

Picking up from #299, where we're implementing integrity checks for uploads.
Yeah, this was because of the char limit. It's frustratingly 1 character too long.