| /* | 
 |  * Copyright 2013 Google Inc. | 
 |  * | 
 |  * Use of this source code is governed by a BSD-style license that can be | 
 |  * found in the LICENSE file. | 
 |  */ | 
 |  | 
 | #ifndef SkSHA1_DEFINED | 
 | #define SkSHA1_DEFINED | 
 |  | 
 | #include "SkTypes.h" | 
 | #include "SkEndian.h" | 
 | #include "SkStream.h" | 
 |  | 
 | //The following macros can be defined to affect the SHA1 code generated. | 
 | //SK_SHA1_CLEAR_DATA causes all intermediate state to be overwritten with 0's. | 
 | //SK_CPU_BENDIAN 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_BENDIAN. | 
 |  | 
 | class SkSHA1 : public SkWStream { | 
 | public: | 
 |     SkSHA1(); | 
 |  | 
 |     /** Processes input, adding it to the digest. | 
 |      *  Note that this treats the buffer as a series of uint8_t values. | 
 |      */ | 
 |     bool write(const void* buffer, size_t size) override { | 
 |         update(reinterpret_cast<const uint8_t*>(buffer), size); | 
 |         return true; | 
 |     } | 
 |  | 
 |     size_t bytesWritten() const 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[20]; | 
 |     }; | 
 |  | 
 |     /** Computes and returns the digest. */ | 
 |     void finish(Digest& digest); | 
 |  | 
 | private: | 
 |     // number of bytes, modulo 2^64 | 
 |     uint64_t byteCount; | 
 |  | 
 |     // state (ABCDE) | 
 |     uint32_t state[5]; | 
 |  | 
 |     // input buffer | 
 |     uint8_t buffer[64]; | 
 | }; | 
 |  | 
 | #endif |