14c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 24c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * All rights reserved. 34c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 44c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * This package is an SSL implementation written 54c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * by Eric Young (eay@cryptsoft.com). 64c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The implementation was written so as to conform with Netscapes SSL. 74c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 84c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * This library is free for commercial and non-commercial use as long as 94c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the following conditions are aheared to. The following conditions 104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * apply to all code found in this distribution, be it the RC4, RSA, 114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * lhash, DES, etc., code; not just the SSL code. The SSL documentation 124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * included with this distribution is covered by the same copyright terms 134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * except that the holder is Tim Hudson (tjh@cryptsoft.com). 144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Copyright remains Eric Young's, and as such any Copyright notices in 164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the code are not to be removed. 174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * If this package is used in a product, Eric Young should be given attribution 184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * as the author of the parts of the library used. 194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * This can be in the form of a textual message at program startup or 204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * in documentation (online or textual) provided with the package. 214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Redistribution and use in source and binary forms, with or without 234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * modification, are permitted provided that the following conditions 244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * are met: 254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 1. Redistributions of source code must retain the copyright 264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * notice, this list of conditions and the following disclaimer. 274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 2. Redistributions in binary form must reproduce the above copyright 284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * notice, this list of conditions and the following disclaimer in the 294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * documentation and/or other materials provided with the distribution. 304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 3. All advertising materials mentioning features or use of this software 314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * must display the following acknowledgement: 324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * "This product includes cryptographic software written by 334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Eric Young (eay@cryptsoft.com)" 344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The word 'cryptographic' can be left out if the rouines from the library 354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * being used are not cryptographic related :-). 364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 4. If you include any Windows specific code (or a derivative thereof) from 374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the apps directory (application code) you must include an acknowledgement: 384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * SUCH DAMAGE. 514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The licence and distribution terms for any publically available version or 534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * derivative of this code cannot be changed. i.e. this code cannot simply be 544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * copied and put under another distribution licence 554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * [including the GNU Public Licence.] */ 564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_HEADER_SHA_H 584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define OPENSSL_HEADER_SHA_H 594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/base.h> 614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#if defined(__cplusplus) 634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleyextern "C" { 644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif 654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA-1. */ 684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA_CBLOCK is the block size of SHA-1. */ 714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SHA_CBLOCK 64 724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA_DIGEST_LENGTH is the length of a SHA-1 digest. */ 744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SHA_DIGEST_LENGTH 20 754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* TODO(fork): remove */ 774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SHA_LBLOCK 16 784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SHA_LONG uint32_t 794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA1_Init initialises |sha| and returns one. */ 81eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA1_Init(SHA_CTX *sha); 824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA1_Update adds |len| bytes from |data| to |sha| and returns one. */ 84eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA1_Update(SHA_CTX *sha, const void *data, size_t len); 854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA1_Final adds the final padding to |sha| and writes the resulting digest 874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * to |md|, which must have at least |SHA_DIGEST_LENGTH| bytes of space. It 884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * returns one. */ 89eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA1_Final(uint8_t *md, SHA_CTX *sha); 904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA1 writes the digest of |len| bytes from |data| to |out| and returns 924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |out|. There must be at least |SHA_DIGEST_LENGTH| bytes of space in 934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |out|. */ 94eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT uint8_t *SHA1(const uint8_t *data, size_t len, uint8_t *out); 954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA1_Transform is a low-level function that performs a single, SHA-1 block 974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * transformation using the state from |sha| and 64 bytes from |block|. */ 98eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SHA1_Transform(SHA_CTX *sha, const uint8_t *block); 994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct sha_state_st { 1014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley uint32_t h0, h1, h2, h3, h4; 1024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley uint32_t Nl, Nh; 1034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley uint32_t data[16]; 1044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley unsigned int num; 1054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley}; 1064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA-224. */ 1094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA224_CBLOCK is the block size of SHA-224. */ 1114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SHA224_CBLOCK 64 1124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA224_DIGEST_LENGTH is the length of a SHA-224 digest. */ 1144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SHA224_DIGEST_LENGTH 28 1154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA224_Init initialises |sha| and returns 1. */ 117eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA224_Init(SHA256_CTX *sha); 1184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA224_Update adds |len| bytes from |data| to |sha|. */ 120eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA224_Update(SHA256_CTX *sha, const void *data, size_t len); 1214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA224_Final adds the final padding to |sha| and writes the resulting digest 1234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * to |md|, which must have at least |SHA_DIGEST_LENGTH| bytes of space. */ 124eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA224_Final(uint8_t *md, SHA256_CTX *sha); 1254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA224 writes the digest of |len| bytes from |data| to |out| and returns 1274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |out|. There must be at least |SHA_DIGEST_LENGTH| bytes of space in 1284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |out|. */ 129eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT uint8_t *SHA224(const uint8_t *data, size_t len, uint8_t *out); 1304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA-256. */ 1334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA256_CBLOCK is the block size of SHA-256. */ 1354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SHA256_CBLOCK 64 1364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA256_DIGEST_LENGTH is the length of a SHA-256 digest. */ 1384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SHA256_DIGEST_LENGTH 32 1394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA256_Init initialises |sha| and returns 1. */ 141eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA256_Init(SHA256_CTX *sha); 1424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA256_Update adds |len| bytes from |data| to |sha|. */ 144eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA256_Update(SHA256_CTX *sha, const void *data, size_t len); 1454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA256_Final adds the final padding to |sha| and writes the resulting digest 1474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * to |md|, which must have at least |SHA_DIGEST_LENGTH| bytes of space. */ 148eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA256_Final(uint8_t *md, SHA256_CTX *sha); 1494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA256 writes the digest of |len| bytes from |data| to |out| and returns 1514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |out|. There must be at least |SHA_DIGEST_LENGTH| bytes of space in 1524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |out|. */ 153eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT uint8_t *SHA256(const uint8_t *data, size_t len, uint8_t *out); 1544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA256_Transform is a low-level function that performs a single, SHA-1 block 1564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * transformation using the state from |sha| and 64 bytes from |block|. */ 157eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SHA256_Transform(SHA256_CTX *sha, const uint8_t *data); 1584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct sha256_state_st { 1604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley uint32_t h[8]; 1614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley uint32_t Nl, Nh; 1624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley uint32_t data[16]; 1634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley unsigned int num, md_len; 1644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley}; 1654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA-384. */ 1684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA384_CBLOCK is the block size of SHA-384. */ 1704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SHA384_CBLOCK 128 1714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA384_DIGEST_LENGTH is the length of a SHA-384 digest. */ 1734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SHA384_DIGEST_LENGTH 48 1744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA384_Init initialises |sha| and returns 1. */ 176eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA384_Init(SHA512_CTX *sha); 1774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA384_Update adds |len| bytes from |data| to |sha|. */ 179eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA384_Update(SHA512_CTX *sha, const void *data, size_t len); 1804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA384_Final adds the final padding to |sha| and writes the resulting digest 1824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * to |md|, which must have at least |SHA_DIGEST_LENGTH| bytes of space. */ 183eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA384_Final(uint8_t *md, SHA512_CTX *sha); 1844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA384 writes the digest of |len| bytes from |data| to |out| and returns 1864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |out|. There must be at least |SHA_DIGEST_LENGTH| bytes of space in 1874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |out|. */ 188eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT uint8_t *SHA384(const uint8_t *data, size_t len, uint8_t *out); 1894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA384_Transform is a low-level function that performs a single, SHA-1 block 1914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * transformation using the state from |sha| and 64 bytes from |block|. */ 192eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SHA384_Transform(SHA512_CTX *sha, const uint8_t *data); 1934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA-512. */ 1964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA512_CBLOCK is the block size of SHA-512. */ 1984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SHA512_CBLOCK 128 1994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA512_DIGEST_LENGTH is the length of a SHA-512 digest. */ 2014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SHA512_DIGEST_LENGTH 64 2024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA512_Init initialises |sha| and returns 1. */ 204eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA512_Init(SHA512_CTX *sha); 2054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA512_Update adds |len| bytes from |data| to |sha|. */ 207eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA512_Update(SHA512_CTX *sha, const void *data, size_t len); 2084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA512_Final adds the final padding to |sha| and writes the resulting digest 2104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * to |md|, which must have at least |SHA_DIGEST_LENGTH| bytes of space. */ 211eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SHA512_Final(uint8_t *md, SHA512_CTX *sha); 2124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA512 writes the digest of |len| bytes from |data| to |out| and returns 2144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |out|. There must be at least |SHA_DIGEST_LENGTH| bytes of space in 2154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * |out|. */ 216eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT uint8_t *SHA512(const uint8_t *data, size_t len, uint8_t *out); 2174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SHA512_Transform is a low-level function that performs a single, SHA-1 block 2194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * transformation using the state from |sha| and 64 bytes from |block|. */ 220eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void SHA512_Transform(SHA512_CTX *sha, const uint8_t *data); 2214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct sha512_state_st { 2234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley uint64_t h[8]; 2244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley uint64_t Nl, Nh; 2254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley union { 2264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley uint64_t d[16]; 2274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley uint8_t p[64]; 2284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley } u; 2294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley unsigned int num, md_len; 2304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley}; 2314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#if defined(__cplusplus) 2344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley} /* extern C */ 2354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif 2364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif /* OPENSSL_HEADER_SHA_H */ 238