xref: /openbsd-src/lib/libcrypto/man/SHA1.3 (revision e5347f4cc67788bd2bb94083c3fde3ea93d695b2)
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