1*8fb009dcSAndroid Build Coastguard Worker /* Copyright (C) 1995-1998 Eric Young ([email protected]) 2*8fb009dcSAndroid Build Coastguard Worker * All rights reserved. 3*8fb009dcSAndroid Build Coastguard Worker * 4*8fb009dcSAndroid Build Coastguard Worker * This package is an SSL implementation written 5*8fb009dcSAndroid Build Coastguard Worker * by Eric Young ([email protected]). 6*8fb009dcSAndroid Build Coastguard Worker * The implementation was written so as to conform with Netscapes SSL. 7*8fb009dcSAndroid Build Coastguard Worker * 8*8fb009dcSAndroid Build Coastguard Worker * This library is free for commercial and non-commercial use as long as 9*8fb009dcSAndroid Build Coastguard Worker * the following conditions are aheared to. The following conditions 10*8fb009dcSAndroid Build Coastguard Worker * apply to all code found in this distribution, be it the RC4, RSA, 11*8fb009dcSAndroid Build Coastguard Worker * lhash, DES, etc., code; not just the SSL code. The SSL documentation 12*8fb009dcSAndroid Build Coastguard Worker * included with this distribution is covered by the same copyright terms 13*8fb009dcSAndroid Build Coastguard Worker * except that the holder is Tim Hudson ([email protected]). 14*8fb009dcSAndroid Build Coastguard Worker * 15*8fb009dcSAndroid Build Coastguard Worker * Copyright remains Eric Young's, and as such any Copyright notices in 16*8fb009dcSAndroid Build Coastguard Worker * the code are not to be removed. 17*8fb009dcSAndroid Build Coastguard Worker * If this package is used in a product, Eric Young should be given attribution 18*8fb009dcSAndroid Build Coastguard Worker * as the author of the parts of the library used. 19*8fb009dcSAndroid Build Coastguard Worker * This can be in the form of a textual message at program startup or 20*8fb009dcSAndroid Build Coastguard Worker * in documentation (online or textual) provided with the package. 21*8fb009dcSAndroid Build Coastguard Worker * 22*8fb009dcSAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 23*8fb009dcSAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 24*8fb009dcSAndroid Build Coastguard Worker * are met: 25*8fb009dcSAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the copyright 26*8fb009dcSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 27*8fb009dcSAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 28*8fb009dcSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 29*8fb009dcSAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 30*8fb009dcSAndroid Build Coastguard Worker * 3. All advertising materials mentioning features or use of this software 31*8fb009dcSAndroid Build Coastguard Worker * must display the following acknowledgement: 32*8fb009dcSAndroid Build Coastguard Worker * "This product includes cryptographic software written by 33*8fb009dcSAndroid Build Coastguard Worker * Eric Young ([email protected])" 34*8fb009dcSAndroid Build Coastguard Worker * The word 'cryptographic' can be left out if the rouines from the library 35*8fb009dcSAndroid Build Coastguard Worker * being used are not cryptographic related :-). 36*8fb009dcSAndroid Build Coastguard Worker * 4. If you include any Windows specific code (or a derivative thereof) from 37*8fb009dcSAndroid Build Coastguard Worker * the apps directory (application code) you must include an acknowledgement: 38*8fb009dcSAndroid Build Coastguard Worker * "This product includes software written by Tim Hudson ([email protected])" 39*8fb009dcSAndroid Build Coastguard Worker * 40*8fb009dcSAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41*8fb009dcSAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42*8fb009dcSAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43*8fb009dcSAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 44*8fb009dcSAndroid Build Coastguard Worker * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 45*8fb009dcSAndroid Build Coastguard Worker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 46*8fb009dcSAndroid Build Coastguard Worker * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47*8fb009dcSAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 48*8fb009dcSAndroid Build Coastguard Worker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 49*8fb009dcSAndroid Build Coastguard Worker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 50*8fb009dcSAndroid Build Coastguard Worker * SUCH DAMAGE. 51*8fb009dcSAndroid Build Coastguard Worker * 52*8fb009dcSAndroid Build Coastguard Worker * The licence and distribution terms for any publically available version or 53*8fb009dcSAndroid Build Coastguard Worker * derivative of this code cannot be changed. i.e. this code cannot simply be 54*8fb009dcSAndroid Build Coastguard Worker * copied and put under another distribution licence 55*8fb009dcSAndroid Build Coastguard Worker * [including the GNU Public Licence.] */ 56*8fb009dcSAndroid Build Coastguard Worker 57*8fb009dcSAndroid Build Coastguard Worker #ifndef OPENSSL_HEADER_SHA_H 58*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_HEADER_SHA_H 59*8fb009dcSAndroid Build Coastguard Worker 60*8fb009dcSAndroid Build Coastguard Worker #include <openssl/base.h> 61*8fb009dcSAndroid Build Coastguard Worker 62*8fb009dcSAndroid Build Coastguard Worker #if defined(__cplusplus) 63*8fb009dcSAndroid Build Coastguard Worker extern "C" { 64*8fb009dcSAndroid Build Coastguard Worker #endif 65*8fb009dcSAndroid Build Coastguard Worker 66*8fb009dcSAndroid Build Coastguard Worker 67*8fb009dcSAndroid Build Coastguard Worker // The SHA family of hash functions (SHA-1 and SHA-2). 68*8fb009dcSAndroid Build Coastguard Worker 69*8fb009dcSAndroid Build Coastguard Worker 70*8fb009dcSAndroid Build Coastguard Worker // SHA_CBLOCK is the block size of SHA-1. 71*8fb009dcSAndroid Build Coastguard Worker #define SHA_CBLOCK 64 72*8fb009dcSAndroid Build Coastguard Worker 73*8fb009dcSAndroid Build Coastguard Worker // SHA_DIGEST_LENGTH is the length of a SHA-1 digest. 74*8fb009dcSAndroid Build Coastguard Worker #define SHA_DIGEST_LENGTH 20 75*8fb009dcSAndroid Build Coastguard Worker 76*8fb009dcSAndroid Build Coastguard Worker // SHA1_Init initialises |sha| and returns one. 77*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA1_Init(SHA_CTX *sha); 78*8fb009dcSAndroid Build Coastguard Worker 79*8fb009dcSAndroid Build Coastguard Worker // SHA1_Update adds |len| bytes from |data| to |sha| and returns one. 80*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA1_Update(SHA_CTX *sha, const void *data, size_t len); 81*8fb009dcSAndroid Build Coastguard Worker 82*8fb009dcSAndroid Build Coastguard Worker // SHA1_Final adds the final padding to |sha| and writes the resulting digest to 83*8fb009dcSAndroid Build Coastguard Worker // |out|, which must have at least |SHA_DIGEST_LENGTH| bytes of space. It 84*8fb009dcSAndroid Build Coastguard Worker // returns one. 85*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA1_Final(uint8_t out[SHA_DIGEST_LENGTH], SHA_CTX *sha); 86*8fb009dcSAndroid Build Coastguard Worker 87*8fb009dcSAndroid Build Coastguard Worker // SHA1 writes the digest of |len| bytes from |data| to |out| and returns 88*8fb009dcSAndroid Build Coastguard Worker // |out|. There must be at least |SHA_DIGEST_LENGTH| bytes of space in 89*8fb009dcSAndroid Build Coastguard Worker // |out|. 90*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT uint8_t *SHA1(const uint8_t *data, size_t len, 91*8fb009dcSAndroid Build Coastguard Worker uint8_t out[SHA_DIGEST_LENGTH]); 92*8fb009dcSAndroid Build Coastguard Worker 93*8fb009dcSAndroid Build Coastguard Worker // SHA1_Transform is a low-level function that performs a single, SHA-1 block 94*8fb009dcSAndroid Build Coastguard Worker // transformation using the state from |sha| and |SHA_CBLOCK| bytes from 95*8fb009dcSAndroid Build Coastguard Worker // |block|. 96*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void SHA1_Transform(SHA_CTX *sha, 97*8fb009dcSAndroid Build Coastguard Worker const uint8_t block[SHA_CBLOCK]); 98*8fb009dcSAndroid Build Coastguard Worker 99*8fb009dcSAndroid Build Coastguard Worker // CRYPTO_fips_186_2_prf derives |out_len| bytes from |xkey| using the PRF 100*8fb009dcSAndroid Build Coastguard Worker // defined in FIPS 186-2, Appendix 3.1, with change notice 1 applied. The b 101*8fb009dcSAndroid Build Coastguard Worker // parameter is 160 and seed, XKEY, is also 160 bits. The optional XSEED user 102*8fb009dcSAndroid Build Coastguard Worker // input is all zeros. 103*8fb009dcSAndroid Build Coastguard Worker // 104*8fb009dcSAndroid Build Coastguard Worker // The PRF generates a sequence of 320-bit numbers. Each number is encoded as a 105*8fb009dcSAndroid Build Coastguard Worker // 40-byte string in big-endian and then concatenated to form |out|. If 106*8fb009dcSAndroid Build Coastguard Worker // |out_len| is not a multiple of 40, the result is truncated. This matches the 107*8fb009dcSAndroid Build Coastguard Worker // construction used in Section 7 of RFC 4186 and Section 7 of RFC 4187. 108*8fb009dcSAndroid Build Coastguard Worker // 109*8fb009dcSAndroid Build Coastguard Worker // This PRF is based on SHA-1, a weak hash function, and should not be used 110*8fb009dcSAndroid Build Coastguard Worker // in new protocols. It is provided for compatibility with some legacy EAP 111*8fb009dcSAndroid Build Coastguard Worker // methods. 112*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void CRYPTO_fips_186_2_prf( 113*8fb009dcSAndroid Build Coastguard Worker uint8_t *out, size_t out_len, const uint8_t xkey[SHA_DIGEST_LENGTH]); 114*8fb009dcSAndroid Build Coastguard Worker 115*8fb009dcSAndroid Build Coastguard Worker struct sha_state_st { 116*8fb009dcSAndroid Build Coastguard Worker #if defined(__cplusplus) || defined(OPENSSL_WINDOWS) 117*8fb009dcSAndroid Build Coastguard Worker uint32_t h[5]; 118*8fb009dcSAndroid Build Coastguard Worker #else 119*8fb009dcSAndroid Build Coastguard Worker // wpa_supplicant accesses |h0|..|h4| so we must support those names for 120*8fb009dcSAndroid Build Coastguard Worker // compatibility with it until it can be updated. Anonymous unions are only 121*8fb009dcSAndroid Build Coastguard Worker // standard in C11, so disable this workaround in C++. 122*8fb009dcSAndroid Build Coastguard Worker union { 123*8fb009dcSAndroid Build Coastguard Worker uint32_t h[5]; 124*8fb009dcSAndroid Build Coastguard Worker struct { 125*8fb009dcSAndroid Build Coastguard Worker uint32_t h0; 126*8fb009dcSAndroid Build Coastguard Worker uint32_t h1; 127*8fb009dcSAndroid Build Coastguard Worker uint32_t h2; 128*8fb009dcSAndroid Build Coastguard Worker uint32_t h3; 129*8fb009dcSAndroid Build Coastguard Worker uint32_t h4; 130*8fb009dcSAndroid Build Coastguard Worker }; 131*8fb009dcSAndroid Build Coastguard Worker }; 132*8fb009dcSAndroid Build Coastguard Worker #endif 133*8fb009dcSAndroid Build Coastguard Worker uint32_t Nl, Nh; 134*8fb009dcSAndroid Build Coastguard Worker uint8_t data[SHA_CBLOCK]; 135*8fb009dcSAndroid Build Coastguard Worker unsigned num; 136*8fb009dcSAndroid Build Coastguard Worker }; 137*8fb009dcSAndroid Build Coastguard Worker 138*8fb009dcSAndroid Build Coastguard Worker 139*8fb009dcSAndroid Build Coastguard Worker // SHA-224. 140*8fb009dcSAndroid Build Coastguard Worker 141*8fb009dcSAndroid Build Coastguard Worker // SHA224_CBLOCK is the block size of SHA-224. 142*8fb009dcSAndroid Build Coastguard Worker #define SHA224_CBLOCK 64 143*8fb009dcSAndroid Build Coastguard Worker 144*8fb009dcSAndroid Build Coastguard Worker // SHA224_DIGEST_LENGTH is the length of a SHA-224 digest. 145*8fb009dcSAndroid Build Coastguard Worker #define SHA224_DIGEST_LENGTH 28 146*8fb009dcSAndroid Build Coastguard Worker 147*8fb009dcSAndroid Build Coastguard Worker // SHA224_Init initialises |sha| and returns 1. 148*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA224_Init(SHA256_CTX *sha); 149*8fb009dcSAndroid Build Coastguard Worker 150*8fb009dcSAndroid Build Coastguard Worker // SHA224_Update adds |len| bytes from |data| to |sha| and returns 1. 151*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA224_Update(SHA256_CTX *sha, const void *data, size_t len); 152*8fb009dcSAndroid Build Coastguard Worker 153*8fb009dcSAndroid Build Coastguard Worker // SHA224_Final adds the final padding to |sha| and writes the resulting digest 154*8fb009dcSAndroid Build Coastguard Worker // to |out|, which must have at least |SHA224_DIGEST_LENGTH| bytes of space. It 155*8fb009dcSAndroid Build Coastguard Worker // returns one on success and zero on programmer error. 156*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA224_Final(uint8_t out[SHA224_DIGEST_LENGTH], 157*8fb009dcSAndroid Build Coastguard Worker SHA256_CTX *sha); 158*8fb009dcSAndroid Build Coastguard Worker 159*8fb009dcSAndroid Build Coastguard Worker // SHA224 writes the digest of |len| bytes from |data| to |out| and returns 160*8fb009dcSAndroid Build Coastguard Worker // |out|. There must be at least |SHA224_DIGEST_LENGTH| bytes of space in 161*8fb009dcSAndroid Build Coastguard Worker // |out|. 162*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT uint8_t *SHA224(const uint8_t *data, size_t len, 163*8fb009dcSAndroid Build Coastguard Worker uint8_t out[SHA224_DIGEST_LENGTH]); 164*8fb009dcSAndroid Build Coastguard Worker 165*8fb009dcSAndroid Build Coastguard Worker 166*8fb009dcSAndroid Build Coastguard Worker // SHA-256. 167*8fb009dcSAndroid Build Coastguard Worker 168*8fb009dcSAndroid Build Coastguard Worker // SHA256_CBLOCK is the block size of SHA-256. 169*8fb009dcSAndroid Build Coastguard Worker #define SHA256_CBLOCK 64 170*8fb009dcSAndroid Build Coastguard Worker 171*8fb009dcSAndroid Build Coastguard Worker // SHA256_DIGEST_LENGTH is the length of a SHA-256 digest. 172*8fb009dcSAndroid Build Coastguard Worker #define SHA256_DIGEST_LENGTH 32 173*8fb009dcSAndroid Build Coastguard Worker 174*8fb009dcSAndroid Build Coastguard Worker // SHA256_Init initialises |sha| and returns 1. 175*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA256_Init(SHA256_CTX *sha); 176*8fb009dcSAndroid Build Coastguard Worker 177*8fb009dcSAndroid Build Coastguard Worker // SHA256_Update adds |len| bytes from |data| to |sha| and returns 1. 178*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA256_Update(SHA256_CTX *sha, const void *data, size_t len); 179*8fb009dcSAndroid Build Coastguard Worker 180*8fb009dcSAndroid Build Coastguard Worker // SHA256_Final adds the final padding to |sha| and writes the resulting digest 181*8fb009dcSAndroid Build Coastguard Worker // to |out|, which must have at least |SHA256_DIGEST_LENGTH| bytes of space. It 182*8fb009dcSAndroid Build Coastguard Worker // returns one on success and zero on programmer error. 183*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA256_Final(uint8_t out[SHA256_DIGEST_LENGTH], 184*8fb009dcSAndroid Build Coastguard Worker SHA256_CTX *sha); 185*8fb009dcSAndroid Build Coastguard Worker 186*8fb009dcSAndroid Build Coastguard Worker // SHA256 writes the digest of |len| bytes from |data| to |out| and returns 187*8fb009dcSAndroid Build Coastguard Worker // |out|. There must be at least |SHA256_DIGEST_LENGTH| bytes of space in 188*8fb009dcSAndroid Build Coastguard Worker // |out|. 189*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT uint8_t *SHA256(const uint8_t *data, size_t len, 190*8fb009dcSAndroid Build Coastguard Worker uint8_t out[SHA256_DIGEST_LENGTH]); 191*8fb009dcSAndroid Build Coastguard Worker 192*8fb009dcSAndroid Build Coastguard Worker // SHA256_Transform is a low-level function that performs a single, SHA-256 193*8fb009dcSAndroid Build Coastguard Worker // block transformation using the state from |sha| and |SHA256_CBLOCK| bytes 194*8fb009dcSAndroid Build Coastguard Worker // from |block|. 195*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void SHA256_Transform(SHA256_CTX *sha, 196*8fb009dcSAndroid Build Coastguard Worker const uint8_t block[SHA256_CBLOCK]); 197*8fb009dcSAndroid Build Coastguard Worker 198*8fb009dcSAndroid Build Coastguard Worker // SHA256_TransformBlocks is a low-level function that takes |num_blocks| * 199*8fb009dcSAndroid Build Coastguard Worker // |SHA256_CBLOCK| bytes of data and performs SHA-256 transforms on it to update 200*8fb009dcSAndroid Build Coastguard Worker // |state|. You should not use this function unless you are implementing a 201*8fb009dcSAndroid Build Coastguard Worker // derivative of SHA-256. 202*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void SHA256_TransformBlocks(uint32_t state[8], 203*8fb009dcSAndroid Build Coastguard Worker const uint8_t *data, 204*8fb009dcSAndroid Build Coastguard Worker size_t num_blocks); 205*8fb009dcSAndroid Build Coastguard Worker 206*8fb009dcSAndroid Build Coastguard Worker struct sha256_state_st { 207*8fb009dcSAndroid Build Coastguard Worker uint32_t h[8]; 208*8fb009dcSAndroid Build Coastguard Worker uint32_t Nl, Nh; 209*8fb009dcSAndroid Build Coastguard Worker uint8_t data[SHA256_CBLOCK]; 210*8fb009dcSAndroid Build Coastguard Worker unsigned num, md_len; 211*8fb009dcSAndroid Build Coastguard Worker }; 212*8fb009dcSAndroid Build Coastguard Worker 213*8fb009dcSAndroid Build Coastguard Worker 214*8fb009dcSAndroid Build Coastguard Worker // SHA-384. 215*8fb009dcSAndroid Build Coastguard Worker 216*8fb009dcSAndroid Build Coastguard Worker // SHA384_CBLOCK is the block size of SHA-384. 217*8fb009dcSAndroid Build Coastguard Worker #define SHA384_CBLOCK 128 218*8fb009dcSAndroid Build Coastguard Worker 219*8fb009dcSAndroid Build Coastguard Worker // SHA384_DIGEST_LENGTH is the length of a SHA-384 digest. 220*8fb009dcSAndroid Build Coastguard Worker #define SHA384_DIGEST_LENGTH 48 221*8fb009dcSAndroid Build Coastguard Worker 222*8fb009dcSAndroid Build Coastguard Worker // SHA384_Init initialises |sha| and returns 1. 223*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA384_Init(SHA512_CTX *sha); 224*8fb009dcSAndroid Build Coastguard Worker 225*8fb009dcSAndroid Build Coastguard Worker // SHA384_Update adds |len| bytes from |data| to |sha| and returns 1. 226*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA384_Update(SHA512_CTX *sha, const void *data, size_t len); 227*8fb009dcSAndroid Build Coastguard Worker 228*8fb009dcSAndroid Build Coastguard Worker // SHA384_Final adds the final padding to |sha| and writes the resulting digest 229*8fb009dcSAndroid Build Coastguard Worker // to |out|, which must have at least |SHA384_DIGEST_LENGTH| bytes of space. It 230*8fb009dcSAndroid Build Coastguard Worker // returns one on success and zero on programmer error. 231*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA384_Final(uint8_t out[SHA384_DIGEST_LENGTH], 232*8fb009dcSAndroid Build Coastguard Worker SHA512_CTX *sha); 233*8fb009dcSAndroid Build Coastguard Worker 234*8fb009dcSAndroid Build Coastguard Worker // SHA384 writes the digest of |len| bytes from |data| to |out| and returns 235*8fb009dcSAndroid Build Coastguard Worker // |out|. There must be at least |SHA384_DIGEST_LENGTH| bytes of space in 236*8fb009dcSAndroid Build Coastguard Worker // |out|. 237*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT uint8_t *SHA384(const uint8_t *data, size_t len, 238*8fb009dcSAndroid Build Coastguard Worker uint8_t out[SHA384_DIGEST_LENGTH]); 239*8fb009dcSAndroid Build Coastguard Worker 240*8fb009dcSAndroid Build Coastguard Worker 241*8fb009dcSAndroid Build Coastguard Worker // SHA-512. 242*8fb009dcSAndroid Build Coastguard Worker 243*8fb009dcSAndroid Build Coastguard Worker // SHA512_CBLOCK is the block size of SHA-512. 244*8fb009dcSAndroid Build Coastguard Worker #define SHA512_CBLOCK 128 245*8fb009dcSAndroid Build Coastguard Worker 246*8fb009dcSAndroid Build Coastguard Worker // SHA512_DIGEST_LENGTH is the length of a SHA-512 digest. 247*8fb009dcSAndroid Build Coastguard Worker #define SHA512_DIGEST_LENGTH 64 248*8fb009dcSAndroid Build Coastguard Worker 249*8fb009dcSAndroid Build Coastguard Worker // SHA512_Init initialises |sha| and returns 1. 250*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA512_Init(SHA512_CTX *sha); 251*8fb009dcSAndroid Build Coastguard Worker 252*8fb009dcSAndroid Build Coastguard Worker // SHA512_Update adds |len| bytes from |data| to |sha| and returns 1. 253*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA512_Update(SHA512_CTX *sha, const void *data, size_t len); 254*8fb009dcSAndroid Build Coastguard Worker 255*8fb009dcSAndroid Build Coastguard Worker // SHA512_Final adds the final padding to |sha| and writes the resulting digest 256*8fb009dcSAndroid Build Coastguard Worker // to |out|, which must have at least |SHA512_DIGEST_LENGTH| bytes of space. It 257*8fb009dcSAndroid Build Coastguard Worker // returns one on success and zero on programmer error. 258*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA512_Final(uint8_t out[SHA512_DIGEST_LENGTH], 259*8fb009dcSAndroid Build Coastguard Worker SHA512_CTX *sha); 260*8fb009dcSAndroid Build Coastguard Worker 261*8fb009dcSAndroid Build Coastguard Worker // SHA512 writes the digest of |len| bytes from |data| to |out| and returns 262*8fb009dcSAndroid Build Coastguard Worker // |out|. There must be at least |SHA512_DIGEST_LENGTH| bytes of space in 263*8fb009dcSAndroid Build Coastguard Worker // |out|. 264*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT uint8_t *SHA512(const uint8_t *data, size_t len, 265*8fb009dcSAndroid Build Coastguard Worker uint8_t out[SHA512_DIGEST_LENGTH]); 266*8fb009dcSAndroid Build Coastguard Worker 267*8fb009dcSAndroid Build Coastguard Worker // SHA512_Transform is a low-level function that performs a single, SHA-512 268*8fb009dcSAndroid Build Coastguard Worker // block transformation using the state from |sha| and |SHA512_CBLOCK| bytes 269*8fb009dcSAndroid Build Coastguard Worker // from |block|. 270*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void SHA512_Transform(SHA512_CTX *sha, 271*8fb009dcSAndroid Build Coastguard Worker const uint8_t block[SHA512_CBLOCK]); 272*8fb009dcSAndroid Build Coastguard Worker 273*8fb009dcSAndroid Build Coastguard Worker struct sha512_state_st { 274*8fb009dcSAndroid Build Coastguard Worker uint64_t h[8]; 275*8fb009dcSAndroid Build Coastguard Worker uint64_t Nl, Nh; 276*8fb009dcSAndroid Build Coastguard Worker uint8_t p[128]; 277*8fb009dcSAndroid Build Coastguard Worker unsigned num, md_len; 278*8fb009dcSAndroid Build Coastguard Worker }; 279*8fb009dcSAndroid Build Coastguard Worker 280*8fb009dcSAndroid Build Coastguard Worker 281*8fb009dcSAndroid Build Coastguard Worker // SHA-512-256 282*8fb009dcSAndroid Build Coastguard Worker // 283*8fb009dcSAndroid Build Coastguard Worker // See https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf section 5.3.6 284*8fb009dcSAndroid Build Coastguard Worker 285*8fb009dcSAndroid Build Coastguard Worker #define SHA512_256_DIGEST_LENGTH 32 286*8fb009dcSAndroid Build Coastguard Worker 287*8fb009dcSAndroid Build Coastguard Worker // SHA512_256_Init initialises |sha| and returns 1. 288*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA512_256_Init(SHA512_CTX *sha); 289*8fb009dcSAndroid Build Coastguard Worker 290*8fb009dcSAndroid Build Coastguard Worker // SHA512_256_Update adds |len| bytes from |data| to |sha| and returns 1. 291*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA512_256_Update(SHA512_CTX *sha, const void *data, 292*8fb009dcSAndroid Build Coastguard Worker size_t len); 293*8fb009dcSAndroid Build Coastguard Worker 294*8fb009dcSAndroid Build Coastguard Worker // SHA512_256_Final adds the final padding to |sha| and writes the resulting 295*8fb009dcSAndroid Build Coastguard Worker // digest to |out|, which must have at least |SHA512_256_DIGEST_LENGTH| bytes of 296*8fb009dcSAndroid Build Coastguard Worker // space. It returns one on success and zero on programmer error. 297*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int SHA512_256_Final(uint8_t out[SHA512_256_DIGEST_LENGTH], 298*8fb009dcSAndroid Build Coastguard Worker SHA512_CTX *sha); 299*8fb009dcSAndroid Build Coastguard Worker 300*8fb009dcSAndroid Build Coastguard Worker // SHA512_256 writes the digest of |len| bytes from |data| to |out| and returns 301*8fb009dcSAndroid Build Coastguard Worker // |out|. There must be at least |SHA512_256_DIGEST_LENGTH| bytes of space in 302*8fb009dcSAndroid Build Coastguard Worker // |out|. 303*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT uint8_t *SHA512_256(const uint8_t *data, size_t len, 304*8fb009dcSAndroid Build Coastguard Worker uint8_t out[SHA512_256_DIGEST_LENGTH]); 305*8fb009dcSAndroid Build Coastguard Worker 306*8fb009dcSAndroid Build Coastguard Worker 307*8fb009dcSAndroid Build Coastguard Worker #if defined(__cplusplus) 308*8fb009dcSAndroid Build Coastguard Worker } // extern C 309*8fb009dcSAndroid Build Coastguard Worker #endif 310*8fb009dcSAndroid Build Coastguard Worker 311*8fb009dcSAndroid Build Coastguard Worker #endif // OPENSSL_HEADER_SHA_H 312