1*23ba6841SJoseph Chen /* sha.h 2*23ba6841SJoseph Chen ** 3*23ba6841SJoseph Chen ** Copyright 2008, The Android Open Source Project 4*23ba6841SJoseph Chen ** 5*23ba6841SJoseph Chen ** Redistribution and use in source and binary forms, with or without 6*23ba6841SJoseph Chen ** modification, are permitted provided that the following conditions are met: 7*23ba6841SJoseph Chen ** * Redistributions of source code must retain the above copyright 8*23ba6841SJoseph Chen ** notice, this list of conditions and the following disclaimer. 9*23ba6841SJoseph Chen ** * Redistributions in binary form must reproduce the above copyright 10*23ba6841SJoseph Chen ** notice, this list of conditions and the following disclaimer in the 11*23ba6841SJoseph Chen ** documentation and/or other materials provided with the distribution. 12*23ba6841SJoseph Chen ** * Neither the name of Google Inc. nor the names of its contributors may 13*23ba6841SJoseph Chen ** be used to endorse or promote products derived from this software 14*23ba6841SJoseph Chen ** without specific prior written permission. 15*23ba6841SJoseph Chen ** 16*23ba6841SJoseph Chen ** THIS SOFTWARE IS PROVIDED BY Google Inc. ``AS IS'' AND ANY EXPRESS OR 17*23ba6841SJoseph Chen ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18*23ba6841SJoseph Chen ** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19*23ba6841SJoseph Chen ** EVENT SHALL Google Inc. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20*23ba6841SJoseph Chen ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21*23ba6841SJoseph Chen ** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22*23ba6841SJoseph Chen ** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23*23ba6841SJoseph Chen ** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24*23ba6841SJoseph Chen ** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25*23ba6841SJoseph Chen ** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26*23ba6841SJoseph Chen */ 27*23ba6841SJoseph Chen 28*23ba6841SJoseph Chen #ifndef _EMBEDDED_SHA_H_ 29*23ba6841SJoseph Chen #define _EMBEDDED_SHA_H_ 30*23ba6841SJoseph Chen 31*23ba6841SJoseph Chen #include <inttypes.h> 32*23ba6841SJoseph Chen 33*23ba6841SJoseph Chen #ifdef __cplusplus 34*23ba6841SJoseph Chen extern "C" { 35*23ba6841SJoseph Chen #endif 36*23ba6841SJoseph Chen 37*23ba6841SJoseph Chen typedef struct SHA_CTX { 38*23ba6841SJoseph Chen uint64_t count; 39*23ba6841SJoseph Chen uint32_t state[5]; 40*23ba6841SJoseph Chen #if defined(HAVE_ENDIAN_H) && defined(HAVE_LITTLE_ENDIAN) 41*23ba6841SJoseph Chen union { 42*23ba6841SJoseph Chen uint8_t b[64]; 43*23ba6841SJoseph Chen uint32_t w[16]; 44*23ba6841SJoseph Chen } buf; 45*23ba6841SJoseph Chen #else 46*23ba6841SJoseph Chen uint8_t buf[64]; 47*23ba6841SJoseph Chen #endif 48*23ba6841SJoseph Chen } SHA_CTX; 49*23ba6841SJoseph Chen 50*23ba6841SJoseph Chen void SHA_init(SHA_CTX* ctx); 51*23ba6841SJoseph Chen void SHA_update(SHA_CTX* ctx, const void* data, int len); 52*23ba6841SJoseph Chen const uint8_t* SHA_final(SHA_CTX* ctx); 53*23ba6841SJoseph Chen 54*23ba6841SJoseph Chen /* Convenience method. Returns digest parameter value. */ 55*23ba6841SJoseph Chen const uint8_t* SHA(const void* data, int len, uint8_t* digest); 56*23ba6841SJoseph Chen 57*23ba6841SJoseph Chen #define SHA_DIGEST_SIZE 20 58*23ba6841SJoseph Chen 59*23ba6841SJoseph Chen #ifdef __cplusplus 60*23ba6841SJoseph Chen } 61*23ba6841SJoseph Chen #endif 62*23ba6841SJoseph Chen 63*23ba6841SJoseph Chen #endif 64