News for hackers. Stuff that matters.
Re:Hashpipe – Pipe iff the hash matches by _prometheus on Friday April 03, 2015 @05:34PM (#9318710)
yeah, hashes are decided by every single bit including the last one, and not a single bit should be output until the hash matches. It currently buffers everything in memory, but might do this: https://github.com/jbenet/hashpipe/issues/1

(some settings dont have disk though).

hashpipe is intended for most executable use cases (usually under <50MB)

Re:Hashpipe – Pipe iff the hash matches by stormbrew on Friday April 03, 2015 @06:20PM (#9318948)
You should be able to detect if the stream is seekable (by checking the result of 'lseek(fd,0,SEEK_CUR)') and only buffer if it's not.

Of course, if you're really paranoid, the file could get changed out from under you. But honestly you're probably screwed either way with an attacker who can do that.

Re:Hashpipe – Pipe iff the hash matches by doomrobo on Friday April 03, 2015 @05:43PM (#9318767)
Loading everything into memory at once shouldn't be necessary to produce a hash of the entire input. All of the hash functions currently supported allow for incremental hashing. That means you can hash in blocks instead of all at once.
Re:Hashpipe – Pipe iff the hash matches by unsoundInput on Friday April 03, 2015 @05:48PM (#9318797)
The input still needs to be cached for eventual output in case the hash matches I assume.
Re:Hashpipe – Pipe iff the hash matches by stouset on Friday April 03, 2015 @07:43PM (#9319244)
More importantly, so nothing is output if the hash doesn't match.
Re:Hashpipe – Pipe iff the hash matches by doomrobo on Friday April 03, 2015 @07:42PM (#9319242)
In that case, you could still cache if you want but at least you now have the option to manage your memory instead of always crashing with large input
Re:Hashpipe – Pipe iff the hash matches by gojomo on Friday April 03, 2015 @07:35PM (#9319216)
Another fun option would be to use a tree hash. The distributor of the content-to-be-verified would then envelope it in a format (to-be-defined) that includes proofs-up-to-root every N bytes. Then the verifier could stream, and know that everything it emits fits into the target hash, needing only N bytes of working space.

Caveats:

The source doing-the-enveloping will need two passes (and enough working space for the remainder-tree).

An attacker could still choose the moment-when-content-goes-bad; in the envisioned use of immediately-executing the verifier output, this might leave things in a problematic/resource-consumptive state. (Scripts could be hardened against such partial-execution failures.)