1 #ifndef MSP_CRYPTO_BLOCKHASH_H_
2 #define MSP_CRYPTO_BLOCKHASH_H_
11 class BlockHash: public Hash
19 char unprocessed[BLOCK_SIZE];
20 unsigned unprocessed_bytes;
26 virtual void update(const char *, unsigned);
29 virtual void process_block(const char *) = 0;
34 inline BlockHash<B>::BlockHash():
39 void BlockHash<B>::update(const char *data, unsigned len)
41 if(unprocessed_bytes && unprocessed_bytes+len>=BLOCK_SIZE)
43 unsigned needed = BLOCK_SIZE-unprocessed_bytes;
44 std::copy(data, data+needed, unprocessed+unprocessed_bytes);
45 process_block(unprocessed);
48 unprocessed_bytes = 0;
51 while(len>=BLOCK_SIZE)
60 std::copy(data, data+len, unprocessed+unprocessed_bytes);
61 unprocessed_bytes += len;