xref: /freebsd/lib/libmd/sha512.3 (revision f1951fd745b894fe6586c298874af98544a5e272)
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 July 20, 2018
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 ,
114which will also erase the
115.Vt SHA512_CTX .
116.Pp
117.Fn SHA512_End
118is a wrapper for
119.Fn SHA512_Final
120which converts the return value to a 129-character
121(including the terminating '\e0')
122.Tn ASCII
123string which represents the 512 bits in hexadecimal.
124.Pp
125.Fn SHA512_File
126calculates the digest of a file, and uses
127.Fn SHA512_End
128to return the result.
129If the file cannot be opened, a null pointer is returned.
130.Fn SHA512_FileChunk
131is similar to
132.Fn SHA512_File ,
133but it only calculates the digest over a byte-range of the file specified,
134starting at
135.Fa offset
136and spanning
137.Fa length
138bytes.
139If the
140.Fa length
141parameter is specified as 0, or more than the length of the remaining part
142of the file,
143.Fn SHA512_FileChunk
144calculates the digest from
145.Fa offset
146to the end of file.
147.Fn SHA512_Data
148calculates the digest of a chunk of data in memory, and uses
149.Fn SHA512_End
150to return the result.
151.Pp
152When using
153.Fn SHA512_End ,
154.Fn SHA512_File ,
155or
156.Fn SHA512_Data ,
157the
158.Fa buf
159argument can be a null pointer, in which case the returned string
160is allocated with
161.Xr malloc 3
162and subsequently must be explicitly deallocated using
163.Xr free 3
164after use.
165If the
166.Fa buf
167argument is non-null it must point to at least 129 characters of buffer space.
168.Pp
169The
170.Li SHA384_
171and
172.Li SHA512_256_
173functions are identical to the
174.Li SHA512_
175functions except they use a different initial hash value and the output is
176truncated to 384 bits and 256 bits respectively.
177.Pp
178.Fn SHA384_End
179is a wrapper for
180.Fn SHA384_Final
181which converts the return value to a 97-character
182(including the terminating '\e0')
183.Tn ASCII
184string which represents the 384 bits in hexadecimal.
185.Pp
186.Fn SHA512_256_End
187is a wrapper for
188.Fn SHA512_Final
189which converts the return value to a 65-character
190(including the terminating '\e0')
191.Tn ASCII
192string which represents the 256 bits in hexadecimal.
193.Sh SEE ALSO
194.Xr md4 3 ,
195.Xr md5 3 ,
196.Xr ripemd 3 ,
197.Xr sha 3 ,
198.Xr sha256 3 ,
199.Xr sha512 3 ,
200.Xr skein 3
201.Sh HISTORY
202These functions appeared in
203.Fx 9.0 .
204.Sh AUTHORS
205The core hash routines were implemented by Colin Percival based on
206the published
207.Tn FIPS 180-2
208standard.
209.Sh BUGS
210No method is known to exist which finds two files having the same hash value,
211nor to find a file with a specific hash value.
212There is on the other hand no guarantee that such a method does not exist.
213