1*e5347f4cStb.\" $OpenBSD: SHA1.3,v 1.9 2024/06/01 12:35:23 tb Exp $ 2794a3b44Sschwarze.\" OpenSSL 99d63d46 Oct 26 13:56:48 2016 -0400 38974101aSjmc.\" 4794a3b44Sschwarze.\" This file was written by Ulf Moeller <ulf@openssl.org> and 5794a3b44Sschwarze.\" Matt Caswell <matt@openssl.org>. 6794a3b44Sschwarze.\" Copyright (c) 2000, 2006, 2015 The OpenSSL Project. All rights reserved. 7794a3b44Sschwarze.\" 8794a3b44Sschwarze.\" Redistribution and use in source and binary forms, with or without 9794a3b44Sschwarze.\" modification, are permitted provided that the following conditions 10794a3b44Sschwarze.\" are met: 11794a3b44Sschwarze.\" 12794a3b44Sschwarze.\" 1. Redistributions of source code must retain the above copyright 13794a3b44Sschwarze.\" notice, this list of conditions and the following disclaimer. 14794a3b44Sschwarze.\" 15794a3b44Sschwarze.\" 2. Redistributions in binary form must reproduce the above copyright 16794a3b44Sschwarze.\" notice, this list of conditions and the following disclaimer in 17794a3b44Sschwarze.\" the documentation and/or other materials provided with the 18794a3b44Sschwarze.\" distribution. 19794a3b44Sschwarze.\" 20794a3b44Sschwarze.\" 3. All advertising materials mentioning features or use of this 21794a3b44Sschwarze.\" software must display the following acknowledgment: 22794a3b44Sschwarze.\" "This product includes software developed by the OpenSSL Project 23794a3b44Sschwarze.\" for use in the OpenSSL Toolkit. (http://www.openssl.org/)" 24794a3b44Sschwarze.\" 25794a3b44Sschwarze.\" 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 26794a3b44Sschwarze.\" endorse or promote products derived from this software without 27794a3b44Sschwarze.\" prior written permission. For written permission, please contact 28794a3b44Sschwarze.\" openssl-core@openssl.org. 29794a3b44Sschwarze.\" 30794a3b44Sschwarze.\" 5. Products derived from this software may not be called "OpenSSL" 31794a3b44Sschwarze.\" nor may "OpenSSL" appear in their names without prior written 32794a3b44Sschwarze.\" permission of the OpenSSL Project. 33794a3b44Sschwarze.\" 34794a3b44Sschwarze.\" 6. Redistributions of any form whatsoever must retain the following 35794a3b44Sschwarze.\" acknowledgment: 36794a3b44Sschwarze.\" "This product includes software developed by the OpenSSL Project 37794a3b44Sschwarze.\" for use in the OpenSSL Toolkit (http://www.openssl.org/)" 38794a3b44Sschwarze.\" 39794a3b44Sschwarze.\" THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 40794a3b44Sschwarze.\" EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 41794a3b44Sschwarze.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 42794a3b44Sschwarze.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 43794a3b44Sschwarze.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 44794a3b44Sschwarze.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 45794a3b44Sschwarze.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 46794a3b44Sschwarze.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47794a3b44Sschwarze.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 48794a3b44Sschwarze.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 49794a3b44Sschwarze.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 50794a3b44Sschwarze.\" OF THE POSSIBILITY OF SUCH DAMAGE. 51794a3b44Sschwarze.\" 52*e5347f4cStb.Dd $Mdocdate: June 1 2024 $ 53f75054deSschwarze.Dt SHA1 3 54f75054deSschwarze.Os 55f75054deSschwarze.Sh NAME 56f75054deSschwarze.Nm SHA1 , 57f75054deSschwarze.Nm SHA1_Init , 58f75054deSschwarze.Nm SHA1_Update , 59794a3b44Sschwarze.Nm SHA1_Final , 60794a3b44Sschwarze.Nm SHA224 , 61794a3b44Sschwarze.Nm SHA224_Init , 62794a3b44Sschwarze.Nm SHA224_Update , 63794a3b44Sschwarze.Nm SHA224_Final , 64794a3b44Sschwarze.Nm SHA256 , 65794a3b44Sschwarze.Nm SHA256_Init , 66794a3b44Sschwarze.Nm SHA256_Update , 67794a3b44Sschwarze.Nm SHA256_Final , 68794a3b44Sschwarze.Nm SHA384 , 69794a3b44Sschwarze.Nm SHA384_Init , 70794a3b44Sschwarze.Nm SHA384_Update , 71794a3b44Sschwarze.Nm SHA384_Final , 72794a3b44Sschwarze.Nm SHA512 , 73794a3b44Sschwarze.Nm SHA512_Init , 74794a3b44Sschwarze.Nm SHA512_Update , 75794a3b44Sschwarze.Nm SHA512_Final 76f75054deSschwarze.Nd Secure Hash Algorithm 77f75054deSschwarze.Sh SYNOPSIS 78f75054deSschwarze.In openssl/sha.h 79f75054deSschwarze.Ft unsigned char * 80f75054deSschwarze.Fo SHA1 81f75054deSschwarze.Fa "const unsigned char *d" 82794a3b44Sschwarze.Fa "size_t n" 83f75054deSschwarze.Fa "unsigned char *md" 84f75054deSschwarze.Fc 85f75054deSschwarze.Ft int 86f75054deSschwarze.Fo SHA1_Init 87f75054deSschwarze.Fa "SHA_CTX *c" 88f75054deSschwarze.Fc 89f75054deSschwarze.Ft int 90f75054deSschwarze.Fo SHA1_Update 91f75054deSschwarze.Fa "SHA_CTX *c" 92f75054deSschwarze.Fa "const void *data" 93794a3b44Sschwarze.Fa "size_t len" 94f75054deSschwarze.Fc 95f75054deSschwarze.Ft int 96f75054deSschwarze.Fo SHA1_Final 97f75054deSschwarze.Fa "unsigned char *md" 98f75054deSschwarze.Fa "SHA_CTX *c" 99f75054deSschwarze.Fc 100794a3b44Sschwarze.Ft unsigned char * 101794a3b44Sschwarze.Fo SHA224 102794a3b44Sschwarze.Fa "const unsigned char *d" 103794a3b44Sschwarze.Fa "size_t n" 104794a3b44Sschwarze.Fa "unsigned char *md" 105794a3b44Sschwarze.Fc 106794a3b44Sschwarze.Ft int 107794a3b44Sschwarze.Fo SHA224_Init 108794a3b44Sschwarze.Fa "SHA256_CTX *c" 109794a3b44Sschwarze.Fc 110794a3b44Sschwarze.Ft int 111794a3b44Sschwarze.Fo SHA224_Update 112794a3b44Sschwarze.Fa "SHA256_CTX *c" 113794a3b44Sschwarze.Fa "const void *data" 114794a3b44Sschwarze.Fa "size_t len" 115794a3b44Sschwarze.Fc 116794a3b44Sschwarze.Ft int 117794a3b44Sschwarze.Fo SHA224_Final 118794a3b44Sschwarze.Fa "unsigned char *md" 119794a3b44Sschwarze.Fa "SHA256_CTX *c" 120794a3b44Sschwarze.Fc 121794a3b44Sschwarze.Ft unsigned char * 122794a3b44Sschwarze.Fo SHA256 123794a3b44Sschwarze.Fa "const unsigned char *d" 124794a3b44Sschwarze.Fa "size_t n" 125794a3b44Sschwarze.Fa "unsigned char *md" 126794a3b44Sschwarze.Fc 127794a3b44Sschwarze.Ft int 128794a3b44Sschwarze.Fo SHA256_Init 129794a3b44Sschwarze.Fa "SHA256_CTX *c" 130794a3b44Sschwarze.Fc 131794a3b44Sschwarze.Ft int 132794a3b44Sschwarze.Fo SHA256_Update 133794a3b44Sschwarze.Fa "SHA256_CTX *c" 134794a3b44Sschwarze.Fa "const void *data" 135794a3b44Sschwarze.Fa "size_t len" 136794a3b44Sschwarze.Fc 137794a3b44Sschwarze.Ft int 138794a3b44Sschwarze.Fo SHA256_Final 139794a3b44Sschwarze.Fa "unsigned char *md" 140794a3b44Sschwarze.Fa "SHA256_CTX *c" 141794a3b44Sschwarze.Fc 142794a3b44Sschwarze.Ft unsigned char * 143794a3b44Sschwarze.Fo SHA384 144794a3b44Sschwarze.Fa "const unsigned char *d" 145794a3b44Sschwarze.Fa "size_t n" 146794a3b44Sschwarze.Fa "unsigned char *md" 147794a3b44Sschwarze.Fc 148794a3b44Sschwarze.Ft int 149794a3b44Sschwarze.Fo SHA384_Init 150794a3b44Sschwarze.Fa "SHA512_CTX *c" 151794a3b44Sschwarze.Fc 152794a3b44Sschwarze.Ft int 153794a3b44Sschwarze.Fo SHA384_Update 154794a3b44Sschwarze.Fa "SHA512_CTX *c" 155794a3b44Sschwarze.Fa "const void *data" 156794a3b44Sschwarze.Fa "size_t len" 157794a3b44Sschwarze.Fc 158794a3b44Sschwarze.Ft int 159794a3b44Sschwarze.Fo SHA384_Final 160794a3b44Sschwarze.Fa "unsigned char *md" 161794a3b44Sschwarze.Fa "SHA512_CTX *c" 162794a3b44Sschwarze.Fc 163794a3b44Sschwarze.Ft unsigned char * 164794a3b44Sschwarze.Fo SHA512 165794a3b44Sschwarze.Fa "const unsigned char *d" 166794a3b44Sschwarze.Fa "size_t n" 167794a3b44Sschwarze.Fa "unsigned char *md" 168794a3b44Sschwarze.Fc 169794a3b44Sschwarze.Ft int 170794a3b44Sschwarze.Fo SHA512_Init 171794a3b44Sschwarze.Fa "SHA512_CTX *c" 172794a3b44Sschwarze.Fc 173794a3b44Sschwarze.Ft int 174794a3b44Sschwarze.Fo SHA512_Update 175794a3b44Sschwarze.Fa "SHA512_CTX *c" 176794a3b44Sschwarze.Fa "const void *data" 177794a3b44Sschwarze.Fa "size_t len" 178794a3b44Sschwarze.Fc 179794a3b44Sschwarze.Ft int 180794a3b44Sschwarze.Fo SHA512_Final 181794a3b44Sschwarze.Fa "unsigned char *md" 182794a3b44Sschwarze.Fa "SHA512_CTX *c" 183794a3b44Sschwarze.Fc 184f75054deSschwarze.Sh DESCRIPTION 185f75054deSschwarzeSHA-1 (Secure Hash Algorithm) is a cryptographic hash function with a 186b5b3773bSjmc160-bit output. 187f75054deSschwarze.Pp 188f75054deSschwarze.Fn SHA1 189f75054deSschwarzecomputes the SHA-1 message digest of the 190f75054deSschwarze.Fa n 191f75054deSschwarzebytes at 192f75054deSschwarze.Fa d 193f75054deSschwarzeand places it in 194f75054deSschwarze.Fa md , 195f75054deSschwarzewhich must have space for 196f75054deSschwarze.Dv SHA_DIGEST_LENGTH 197f75054deSschwarze== 20 bytes of output. 198f75054deSschwarze.Pp 199f75054deSschwarzeThe following functions may be used if the message is not completely 200f75054deSschwarzestored in memory: 201f75054deSschwarze.Pp 202f75054deSschwarze.Fn SHA1_Init 203f75054deSschwarzeinitializes a 204f75054deSschwarze.Vt SHA_CTX 205f75054deSschwarzestructure. 206f75054deSschwarze.Pp 207f75054deSschwarze.Fn SHA1_Update 208f75054deSschwarzecan be called repeatedly with chunks of the message to be hashed 209f75054deSschwarze.Pq Fa len No bytes at Fa data . 210f75054deSschwarze.Pp 211f75054deSschwarze.Fn SHA1_Final 212f75054deSschwarzeplaces the message digest in 213f75054deSschwarze.Fa md , 214f75054deSschwarzewhich must have space for 215f75054deSschwarze.Dv SHA_DIGEST_LENGTH 216f75054deSschwarze== 20 bytes of output, and erases the 217f75054deSschwarze.Vt SHA_CTX . 218f75054deSschwarze.Pp 219794a3b44SschwarzeThe SHA224, SHA256, SHA384, and SHA512 families of functions operate 220794a3b44Sschwarzein the same way as the SHA1 functions. 221794a3b44SschwarzeNote that SHA224 and SHA256 use a 222794a3b44Sschwarze.Vt SHA256_CTX 223794a3b44Sschwarzeobject instead of 224794a3b44Sschwarze.Vt SHA_CTX , 225794a3b44Sschwarzeand SHA384 and SHA512 use 226794a3b44Sschwarze.Vt SHA512_CTX . 227794a3b44SschwarzeThe buffer 228794a3b44Sschwarze.Fa md 229794a3b44Sschwarzemust have space for the output from the SHA variant being used: 230794a3b44Sschwarze.Dv SHA224_DIGEST_LENGTH , 231794a3b44Sschwarze.Dv SHA256_DIGEST_LENGTH , 232794a3b44Sschwarze.Dv SHA384_DIGEST_LENGTH , 233794a3b44Sschwarzeor 234794a3b44Sschwarze.Dv SHA512_DIGEST_LENGTH 235794a3b44Sschwarzebytes. 236794a3b44Sschwarze.Pp 237f75054deSschwarzeApplications should use the higher level functions 238f75054deSschwarze.Xr EVP_DigestInit 3 239f75054deSschwarzeetc. instead of calling the hash functions directly. 240f75054deSschwarze.Sh RETURN VALUES 241794a3b44Sschwarze.Fn SHA1 , 242794a3b44Sschwarze.Fn SHA224 , 243794a3b44Sschwarze.Fn SHA256 , 244794a3b44Sschwarze.Fn SHA384 , 245f75054deSschwarzeand 246794a3b44Sschwarze.Fn SHA512 247794a3b44Sschwarzereturn a pointer to the hash value. 248794a3b44SschwarzeThe other functions return 1 for success or 0 otherwise. 249f75054deSschwarze.Sh SEE ALSO 250f75054deSschwarze.Xr EVP_DigestInit 3 , 251f75054deSschwarze.Xr HMAC 3 , 252f75054deSschwarze.Xr RIPEMD160 3 253f75054deSschwarze.Sh STANDARDS 254*e5347f4cStb.Rs 255*e5347f4cStb.%T Secure Hash Standard (SHS) 256*e5347f4cStb.%R NIST FIPS Publication 257*e5347f4cStb.%N 180-4 258*e5347f4cStb.%U https://doi.org/10.6028/NIST.FIPS.180-4 259*e5347f4cStb.%D 2015 260*e5347f4cStb.Re 261f75054deSschwarze.Sh HISTORY 262f75054deSschwarze.Fn SHA1 , 263f75054deSschwarze.Fn SHA1_Init , 264f75054deSschwarze.Fn SHA1_Update , 265f75054deSschwarzeand 266f75054deSschwarze.Fn SHA1_Final 26710e00d17Sschwarzefirst appeared in SSLeay 0.5.1 and have been available since 2684dc40a1aSschwarze.Ox 2.4 . 2692c07bb3bSschwarze.Pp 2702c07bb3bSschwarzeThe other functions first appeared in OpenSSL 0.9.8 2712c07bb3bSschwarzeand have been available since 2722c07bb3bSschwarze.Ox 4.5 . 2736427274dStb.Sh CAVEATS 2746427274dStbOther implementations allow 2756427274dStb.Fa md 2766427274dStbin 2776427274dStb.Fn SHA1 , 2786427274dStb.Fn SHA224 , 2796427274dStb.Fn SHA256 , 2806427274dStb.Fn SHA384 , 2816427274dStband 2826427274dStb.Fn SHA512 2836427274dStbto be 2846427274dStb.Dv NULL 2856427274dStband return a static array, which is not thread safe. 286