1d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * All rights reserved. 3d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 4d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * This package is an SSL implementation written 5d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * by Eric Young (eay@cryptsoft.com). 6d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * The implementation was written so as to conform with Netscapes SSL. 7d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 8d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * This library is free for commercial and non-commercial use as long as 9d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * the following conditions are aheared to. The following conditions 10d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * apply to all code found in this distribution, be it the RC4, RSA, 11d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * lhash, DES, etc., code; not just the SSL code. The SSL documentation 12d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * included with this distribution is covered by the same copyright terms 13d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * except that the holder is Tim Hudson (tjh@cryptsoft.com). 14d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 15d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * Copyright remains Eric Young's, and as such any Copyright notices in 16d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * the code are not to be removed. 17d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * If this package is used in a product, Eric Young should be given attribution 18d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * as the author of the parts of the library used. 19d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * This can be in the form of a textual message at program startup or 20d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * in documentation (online or textual) provided with the package. 21d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 22d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * Redistribution and use in source and binary forms, with or without 23d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * modification, are permitted provided that the following conditions 24d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * are met: 25d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 1. Redistributions of source code must retain the copyright 26d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * notice, this list of conditions and the following disclaimer. 27d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 2. Redistributions in binary form must reproduce the above copyright 28d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * notice, this list of conditions and the following disclaimer in the 29d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * documentation and/or other materials provided with the distribution. 30d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 3. All advertising materials mentioning features or use of this software 31d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * must display the following acknowledgement: 32d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * "This product includes cryptographic software written by 33d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * Eric Young (eay@cryptsoft.com)" 34d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * The word 'cryptographic' can be left out if the rouines from the library 35d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * being used are not cryptographic related :-). 36d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 4. If you include any Windows specific code (or a derivative thereof) from 37d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * the apps directory (application code) you must include an acknowledgement: 38d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 39d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 40d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 44d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 45d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 46d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 48d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 49d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 50d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * SUCH DAMAGE. 51d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 52d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * The licence and distribution terms for any publically available version or 53d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * derivative of this code cannot be changed. i.e. this code cannot simply be 54d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * copied and put under another distribution licence 55d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * [including the GNU Public Licence.] */ 56d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 57d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#ifndef OPENSSL_HEADER_SHA_H 58d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define OPENSSL_HEADER_SHA_H 59d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 60d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/base.h> 61d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 62d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if defined(__cplusplus) 63d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyextern "C" { 64d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif 65d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 66d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 67d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* The SHA family of hash functions (SHA-1 and SHA-2). */ 68d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 69d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 70d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA_CBLOCK is the block size of SHA-1. */ 71d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define SHA_CBLOCK 64 72d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 73d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA_DIGEST_LENGTH is the length of a SHA-1 digest. */ 74d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define SHA_DIGEST_LENGTH 20 75d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 76d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* TODO(fork): remove */ 77d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define SHA_LBLOCK 16 78d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define SHA_LONG uint32_t 79d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 80d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA1_Init initialises |sha| and returns one. */ 81d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA1_Init(SHA_CTX *sha); 82d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 83d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA1_Update adds |len| bytes from |data| to |sha| and returns one. */ 84d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA1_Update(SHA_CTX *sha, const void *data, size_t len); 85d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 86d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA1_Final adds the final padding to |sha| and writes the resulting digest 87d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * to |md|, which must have at least |SHA_DIGEST_LENGTH| bytes of space. It 88d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * returns one. */ 89d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA1_Final(uint8_t *md, SHA_CTX *sha); 90d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 91d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA1 writes the digest of |len| bytes from |data| to |out| and returns 92d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |out|. There must be at least |SHA_DIGEST_LENGTH| bytes of space in 93d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |out|. */ 94d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT uint8_t *SHA1(const uint8_t *data, size_t len, uint8_t *out); 95d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 96d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA1_Transform is a low-level function that performs a single, SHA-1 block 97d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * transformation using the state from |sha| and 64 bytes from |block|. */ 98d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT void SHA1_Transform(SHA_CTX *sha, const uint8_t *block); 99d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 100d9e397b599b13d642138480a28c14db7a136bf0Adam Langleystruct sha_state_st { 101d9e397b599b13d642138480a28c14db7a136bf0Adam Langley uint32_t h0, h1, h2, h3, h4; 102d9e397b599b13d642138480a28c14db7a136bf0Adam Langley uint32_t Nl, Nh; 103d9e397b599b13d642138480a28c14db7a136bf0Adam Langley uint32_t data[16]; 104d9e397b599b13d642138480a28c14db7a136bf0Adam Langley unsigned int num; 105d9e397b599b13d642138480a28c14db7a136bf0Adam Langley}; 106d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 107d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 108d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA-224. */ 109d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 110d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA224_CBLOCK is the block size of SHA-224. */ 111d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define SHA224_CBLOCK 64 112d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 113d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA224_DIGEST_LENGTH is the length of a SHA-224 digest. */ 114d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define SHA224_DIGEST_LENGTH 28 115d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 116d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA224_Init initialises |sha| and returns 1. */ 117d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA224_Init(SHA256_CTX *sha); 118d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 119d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA224_Update adds |len| bytes from |data| to |sha| and returns 1. */ 120d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA224_Update(SHA256_CTX *sha, const void *data, size_t len); 121d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 122d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA224_Final adds the final padding to |sha| and writes the resulting digest 12353b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley * to |md|, which must have at least |SHA224_DIGEST_LENGTH| bytes of space. It 12453b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley * returns one on success and zero on programmer error. */ 125d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA224_Final(uint8_t *md, SHA256_CTX *sha); 126d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 127d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA224 writes the digest of |len| bytes from |data| to |out| and returns 128d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |out|. There must be at least |SHA224_DIGEST_LENGTH| bytes of space in 129d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |out|. */ 130d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT uint8_t *SHA224(const uint8_t *data, size_t len, uint8_t *out); 131d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 132d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 133d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA-256. */ 134d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 135d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA256_CBLOCK is the block size of SHA-256. */ 136d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define SHA256_CBLOCK 64 137d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 138d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA256_DIGEST_LENGTH is the length of a SHA-256 digest. */ 139d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define SHA256_DIGEST_LENGTH 32 140d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 141d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA256_Init initialises |sha| and returns 1. */ 142d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA256_Init(SHA256_CTX *sha); 143d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 144d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA256_Update adds |len| bytes from |data| to |sha| and returns 1. */ 145d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA256_Update(SHA256_CTX *sha, const void *data, size_t len); 146d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 147d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA256_Final adds the final padding to |sha| and writes the resulting digest 14853b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley * to |md|, which must have at least |SHA256_DIGEST_LENGTH| bytes of space. It 14953b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley * returns one on success and zero on programmer error. */ 150d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA256_Final(uint8_t *md, SHA256_CTX *sha); 151d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 152d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA256 writes the digest of |len| bytes from |data| to |out| and returns 153d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |out|. There must be at least |SHA256_DIGEST_LENGTH| bytes of space in 154d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |out|. */ 155d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT uint8_t *SHA256(const uint8_t *data, size_t len, uint8_t *out); 156d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 157d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA256_Transform is a low-level function that performs a single, SHA-1 block 158d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * transformation using the state from |sha| and 64 bytes from |block|. */ 159d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT void SHA256_Transform(SHA256_CTX *sha, const uint8_t *data); 160d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 161d9e397b599b13d642138480a28c14db7a136bf0Adam Langleystruct sha256_state_st { 162d9e397b599b13d642138480a28c14db7a136bf0Adam Langley uint32_t h[8]; 163d9e397b599b13d642138480a28c14db7a136bf0Adam Langley uint32_t Nl, Nh; 164d9e397b599b13d642138480a28c14db7a136bf0Adam Langley uint32_t data[16]; 165d9e397b599b13d642138480a28c14db7a136bf0Adam Langley unsigned int num, md_len; 166d9e397b599b13d642138480a28c14db7a136bf0Adam Langley}; 167d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 168d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 169d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA-384. */ 170d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 171d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA384_CBLOCK is the block size of SHA-384. */ 172d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define SHA384_CBLOCK 128 173d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 174d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA384_DIGEST_LENGTH is the length of a SHA-384 digest. */ 175d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define SHA384_DIGEST_LENGTH 48 176d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 177d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA384_Init initialises |sha| and returns 1. */ 178d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA384_Init(SHA512_CTX *sha); 179d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 180d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA384_Update adds |len| bytes from |data| to |sha| and returns 1. */ 181d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA384_Update(SHA512_CTX *sha, const void *data, size_t len); 182d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 183d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA384_Final adds the final padding to |sha| and writes the resulting digest 18453b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley * to |md|, which must have at least |SHA384_DIGEST_LENGTH| bytes of space. It 18553b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley * returns one on success and zero on programmer error. */ 186d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA384_Final(uint8_t *md, SHA512_CTX *sha); 187d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 188d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA384 writes the digest of |len| bytes from |data| to |out| and returns 189d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |out|. There must be at least |SHA384_DIGEST_LENGTH| bytes of space in 190d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |out|. */ 191d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT uint8_t *SHA384(const uint8_t *data, size_t len, uint8_t *out); 192d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 193d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA384_Transform is a low-level function that performs a single, SHA-1 block 194d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * transformation using the state from |sha| and 64 bytes from |block|. */ 195d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT void SHA384_Transform(SHA512_CTX *sha, const uint8_t *data); 196d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 197d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 198d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA-512. */ 199d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 200d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA512_CBLOCK is the block size of SHA-512. */ 201d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define SHA512_CBLOCK 128 202d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 203d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA512_DIGEST_LENGTH is the length of a SHA-512 digest. */ 204d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define SHA512_DIGEST_LENGTH 64 205d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 206d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA512_Init initialises |sha| and returns 1. */ 207d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA512_Init(SHA512_CTX *sha); 208d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 209d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA512_Update adds |len| bytes from |data| to |sha| and returns 1. */ 210d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA512_Update(SHA512_CTX *sha, const void *data, size_t len); 211d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 212d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA512_Final adds the final padding to |sha| and writes the resulting digest 21353b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley * to |md|, which must have at least |SHA512_DIGEST_LENGTH| bytes of space. It 21453b272a2813a0b11f107d77100ff8805ada8fbd2Adam Langley * returns one on success and zero on programmer error. */ 215d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT int SHA512_Final(uint8_t *md, SHA512_CTX *sha); 216d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 217d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA512 writes the digest of |len| bytes from |data| to |out| and returns 218d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |out|. There must be at least |SHA512_DIGEST_LENGTH| bytes of space in 219d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * |out|. */ 220d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT uint8_t *SHA512(const uint8_t *data, size_t len, uint8_t *out); 221d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 222d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* SHA512_Transform is a low-level function that performs a single, SHA-1 block 223d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * transformation using the state from |sha| and 64 bytes from |block|. */ 224d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyOPENSSL_EXPORT void SHA512_Transform(SHA512_CTX *sha, const uint8_t *data); 225d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 226d9e397b599b13d642138480a28c14db7a136bf0Adam Langleystruct sha512_state_st { 227d9e397b599b13d642138480a28c14db7a136bf0Adam Langley uint64_t h[8]; 228d9e397b599b13d642138480a28c14db7a136bf0Adam Langley uint64_t Nl, Nh; 229d9e397b599b13d642138480a28c14db7a136bf0Adam Langley union { 230d9e397b599b13d642138480a28c14db7a136bf0Adam Langley uint64_t d[16]; 23173e611480396013cb4e059bb9e5ebb0db8e1ffceAdam Langley uint8_t p[128]; 232d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } u; 233d9e397b599b13d642138480a28c14db7a136bf0Adam Langley unsigned int num, md_len; 234d9e397b599b13d642138480a28c14db7a136bf0Adam Langley}; 235d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 236d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 237d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if defined(__cplusplus) 238d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} /* extern C */ 239d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif 240d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 241d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif /* OPENSSL_HEADER_SHA_H */ 242