diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/utils/SkMD5.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/utils/SkMD5.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,55 @@ +/* + * Copyright 2012 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkMD5_DEFINED +#define SkMD5_DEFINED + +#include "SkTypes.h" +#include "SkEndian.h" +#include "SkStream.h" + +//The following macros can be defined to affect the MD5 code generated. +//SK_MD5_CLEAR_DATA causes all intermediate state to be overwritten with 0's. +//SK_CPU_LENDIAN allows 32 bit <=> 8 bit conversions without copies (if alligned). +//SK_CPU_FAST_UNALIGNED_ACCESS allows 32 bit <=> 8 bit conversions without copies if SK_CPU_LENDIAN. + +class SkMD5 : public SkWStream { +public: + SkMD5(); + + /** Processes input, adding it to the digest. + * Note that this treats the buffer as a series of uint8_t values. + */ + virtual bool write(const void* buffer, size_t size) SK_OVERRIDE { + this->update(reinterpret_cast(buffer), size); + return true; + } + + virtual size_t bytesWritten() const SK_OVERRIDE { return SkToSizeT(this->byteCount); } + + /** Processes input, adding it to the digest. Calling this after finish is undefined. */ + void update(const uint8_t* input, size_t length); + + struct Digest { + uint8_t data[16]; + }; + + /** Computes and returns the digest. */ + void finish(Digest& digest); + +private: + // number of bytes, modulo 2^64 + uint64_t byteCount; + + // state (ABCD) + uint32_t state[4]; + + // input buffer + uint8_t buffer[64]; +}; + +#endif