xref: /freebsd/lib/libmd/sha512.3 (revision 4072ae4e0291f97a2cc69fa4151988a99b06090c)
1.\"
2.\" ----------------------------------------------------------------------------
3.\" "THE BEER-WARE LICENSE" (Revision 42):
4.\" <phk@FreeBSD.org> wrote this file.  As long as you retain this notice you
5.\" can do whatever you want with this stuff. If we meet some day, and you think
6.\" this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
7.\" ----------------------------------------------------------------------------
8.\"
9.\" 	From: Id: mdX.3,v 1.14 1999/02/11 20:31:49 wollman Exp
10.\" $FreeBSD$
11.\"
12.Dd April 22, 2016
13.Dt SHA512 3
14.Os
15.Sh NAME
16.Nm SHA512_Init ,
17.Nm SHA512_Update ,
18.Nm SHA512_Final ,
19.Nm SHA512_End ,
20.Nm SHA512_File ,
21.Nm SHA512_FileChunk ,
22.Nm SHA512_Data ,
23.Nm SHA384_Init ,
24.Nm SHA384_Update ,
25.Nm SHA384_Final ,
26.Nm SHA384_End ,
27.Nm SHA384_File ,
28.Nm SHA384_FileChunk ,
29.Nm SHA384_Data ,
30.Nm SHA512_256_Init ,
31.Nm SHA512_256_Update ,
32.Nm SHA512_256_Final ,
33.Nm SHA512_256_End ,
34.Nm SHA512_256_File ,
35.Nm SHA512_256_FileChunk ,
36.Nm SHA512_256_Data
37.Nd calculate the FIPS 180-4 ``SHA-512'' family of message digests
38.Sh LIBRARY
39.Lb libmd
40.Sh SYNOPSIS
41.In sys/types.h
42.In sha512.h
43.Ft void
44.Fn SHA512_Init "SHA512_CTX *context"
45.Ft void
46.Fn SHA512_Update "SHA512_CTX *context" "const unsigned char *data" "size_t len"
47.Ft void
48.Fn SHA512_Final "unsigned char digest[64]" "SHA512_CTX *context"
49.Ft "char *"
50.Fn SHA512_End "SHA512_CTX *context" "char *buf"
51.Ft "char *"
52.Fn SHA512_File "const char *filename" "char *buf"
53.Ft "char *"
54.Fn SHA512_FileChunk "const char *filename" "char *buf" "off_t offset" "off_t length"
55.Ft "char *"
56.Fn SHA512_Data "const unsigned char *data" "unsigned int len" "char *buf"
57.In sha384.h
58.Ft void
59.Fn SHA384_Init "SHA384_CTX *context"
60.Ft void
61.Fn SHA384_Update "SHA384_CTX *context" "const unsigned char *data" "size_t len"
62.Ft void
63.Fn SHA384_Final "unsigned char digest[48]" "SHA384_CTX *context"
64.Ft "char *"
65.Fn SHA384_End "SHA384_CTX *context" "char *buf"
66.Ft "char *"
67.Fn SHA384_File "const char *filename" "char *buf"
68.Ft "char *"
69.Fn SHA384_FileChunk "const char *filename" "char *buf" "off_t offset" "off_t length"
70.Ft "char *"
71.Fn SHA384_Data "const unsigned char *data" "unsigned int len" "char *buf"
72.In sha512t.h
73.Ft void
74.Fn SHA512_256_Init "SHA512_CTX *context"
75.Ft void
76.Fn SHA512_256_Update "SHA512_CTX *context" "const unsigned char *data" "size_t len"
77.Ft void
78.Fn SHA512_256_Final "unsigned char digest[32]" "SHA512_CTX *context"
79.Ft "char *"
80.Fn SHA512_256_End "SHA512_CTX *context" "char *buf"
81.Ft "char *"
82.Fn SHA512_256_File "const char *filename" "char *buf"
83.Ft "char *"
84.Fn SHA512_256_FileChunk "const char *filename" "char *buf" "off_t offset" "off_t length"
85.Ft "char *"
86.Fn SHA512_256_Data "const unsigned char *data" "unsigned int len" "char *buf"
87.Sh DESCRIPTION
88The
89.Li SHA512_
90functions calculate a 512-bit cryptographic checksum (digest)
91for any number of input bytes.
92A cryptographic checksum is a one-way
93hash function; that is, it is computationally impractical to find
94the input corresponding to a particular output.
95This net result is
96a
97.Dq fingerprint
98of the input-data, which does not disclose the actual input.
99.Pp
100The
101.Fn SHA512_Init ,
102.Fn SHA512_Update ,
103and
104.Fn SHA512_Final
105functions are the core functions.
106Allocate an
107.Vt SHA512_CTX ,
108initialize it with
109.Fn SHA512_Init ,
110run over the data with
111.Fn SHA512_Update ,
112and finally extract the result using
113.Fn SHA512_Final .
114.Pp
115.Fn SHA512_End
116is a wrapper for
117.Fn SHA512_Final
118which converts the return value to a 129-character
119(including the terminating '\e0')
120.Tn ASCII
121string which represents the 512 bits in hexadecimal.
122.Pp
123.Fn SHA512_File
124calculates the digest of a file, and uses
125.Fn SHA512_End
126to return the result.
127If the file cannot be opened, a null pointer is returned.
128.Fn SHA512_FileChunk
129is similar to
130.Fn SHA512_File ,
131but it only calculates the digest over a byte-range of the file specified,
132starting at
133.Fa offset
134and spanning
135.Fa length
136bytes.
137If the
138.Fa length
139parameter is specified as 0, or more than the length of the remaining part
140of the file,
141.Fn SHA512_FileChunk
142calculates the digest from
143.Fa offset
144to the end of file.
145.Fn SHA512_Data
146calculates the digest of a chunk of data in memory, and uses
147.Fn SHA512_End
148to return the result.
149.Pp
150When using
151.Fn SHA512_End ,
152.Fn SHA512_File ,
153or
154.Fn SHA512_Data ,
155the
156.Fa buf
157argument can be a null pointer, in which case the returned string
158is allocated with
159.Xr malloc 3
160and subsequently must be explicitly deallocated using
161.Xr free 3
162after use.
163If the
164.Fa buf
165argument is non-null it must point to at least 129 characters of buffer space.
166.Pp
167The
168.Li SHA384_
169and
170.Li SHA512_256_
171functions are identical to the
172.Li SHA512_
173functions except they use a different initial hash value and the output is
174truncated to 384 bits and 256 bits respectively.
175.Pp
176.Fn SHA384_End
177is a wrapper for
178.Fn SHA384_Final
179which converts the return value to a 97-character
180(including the terminating '\e0')
181.Tn ASCII
182string which represents the 384 bits in hexadecimal.
183.Pp
184.Fn SHA512_256_End
185is a wrapper for
186.Fn SHA512_Final
187which converts the return value to a 65-character
188(including the terminating '\e0')
189.Tn ASCII
190string which represents the 256 bits in hexadecimal.
191.Sh SEE ALSO
192.Xr md4 3 ,
193.Xr md5 3 ,
194.Xr ripemd 3 ,
195.Xr sha 3 ,
196.Xr sha256 3 ,
197.Xr sha512 3 ,
198.Xr skein 3
199.Sh HISTORY
200These functions appeared in
201.Fx 9.0 .
202.Sh AUTHORS
203The core hash routines were implemented by Colin Percival based on
204the published
205.Tn FIPS 180-2
206standard.
207.Sh BUGS
208No method is known to exist which finds two files having the same hash value,
209nor to find a file with a specific hash value.
210There is on the other hand no guarantee that such a method does not exist.
211