| 1 | /* | 
|---|
| 2 | * Copyright 2012 Google Inc. | 
|---|
| 3 | * | 
|---|
| 4 | * Use of this source code is governed by a BSD-style license that can be | 
|---|
| 5 | * found in the LICENSE file. | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef SkMD5_DEFINED | 
|---|
| 9 | #define SkMD5_DEFINED | 
|---|
| 10 |  | 
|---|
| 11 | #include "include/core/SkStream.h" | 
|---|
| 12 | #include "include/private/SkTo.h" | 
|---|
| 13 |  | 
|---|
| 14 | /* Calculate a 128-bit MD5 message-digest of the bytes sent to this stream. */ | 
|---|
| 15 | class SkMD5 : public SkWStream { | 
|---|
| 16 | public: | 
|---|
| 17 | SkMD5(); | 
|---|
| 18 |  | 
|---|
| 19 | /** Processes input, adding it to the digest. | 
|---|
| 20 | Calling this after finish is undefined.  */ | 
|---|
| 21 | bool write(const void* buffer, size_t size) final; | 
|---|
| 22 |  | 
|---|
| 23 | size_t bytesWritten() const final { return SkToSizeT(this->byteCount); } | 
|---|
| 24 |  | 
|---|
| 25 | struct Digest { | 
|---|
| 26 | uint8_t data[16]; | 
|---|
| 27 | bool operator ==(Digest const& other) const { | 
|---|
| 28 | return 0 == memcmp(data, other.data, sizeof(data)); | 
|---|
| 29 | } | 
|---|
| 30 | bool operator !=(Digest const& other) const { return !(*this == other); } | 
|---|
| 31 | }; | 
|---|
| 32 |  | 
|---|
| 33 | /** Computes and returns the digest. */ | 
|---|
| 34 | Digest finish(); | 
|---|
| 35 |  | 
|---|
| 36 | private: | 
|---|
| 37 | uint64_t byteCount;  // number of bytes, modulo 2^64 | 
|---|
| 38 | uint32_t state[4];   // state (ABCD) | 
|---|
| 39 | uint8_t buffer[64];  // input buffer | 
|---|
| 40 | }; | 
|---|
| 41 |  | 
|---|
| 42 | #endif | 
|---|
| 43 |  | 
|---|