xref: /freebsd/lib/libmd/sha512.3 (revision fd3ced15070885c818b74a44a0fbe45ed8687f44)
13b50f6bfSMark Murray.\"
23b50f6bfSMark Murray.\" ----------------------------------------------------------------------------
33b50f6bfSMark Murray.\" "THE BEER-WARE LICENSE" (Revision 42):
43b50f6bfSMark Murray.\" <phk@FreeBSD.org> wrote this file.  As long as you retain this notice you
53b50f6bfSMark Murray.\" can do whatever you want with this stuff. If we meet some day, and you think
63b50f6bfSMark Murray.\" this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
73b50f6bfSMark Murray.\" ----------------------------------------------------------------------------
83b50f6bfSMark Murray.\"
93b50f6bfSMark Murray.\" 	From: Id: mdX.3,v 1.14 1999/02/11 20:31:49 wollman Exp
103b50f6bfSMark Murray.\"
11*fd3ced15SKyle Evans.Dd February 12, 2023
123b50f6bfSMark Murray.Dt SHA512 3
133b50f6bfSMark Murray.Os
143b50f6bfSMark Murray.Sh NAME
153b50f6bfSMark Murray.Nm SHA512_Init ,
163b50f6bfSMark Murray.Nm SHA512_Update ,
173b50f6bfSMark Murray.Nm SHA512_Final ,
183b50f6bfSMark Murray.Nm SHA512_End ,
19*fd3ced15SKyle Evans.Nm SHA512_Fd ,
20*fd3ced15SKyle Evans.Nm SHA512_FdChunk ,
213b50f6bfSMark Murray.Nm SHA512_File ,
223b50f6bfSMark Murray.Nm SHA512_FileChunk ,
237a3f5d11SAllan Jude.Nm SHA512_Data ,
247a3f5d11SAllan Jude.Nm SHA384_Init ,
257a3f5d11SAllan Jude.Nm SHA384_Update ,
267a3f5d11SAllan Jude.Nm SHA384_Final ,
277a3f5d11SAllan Jude.Nm SHA384_End ,
28*fd3ced15SKyle Evans.Nm SHA384_Fd ,
29*fd3ced15SKyle Evans.Nm SHA384_FdChunk ,
307a3f5d11SAllan Jude.Nm SHA384_File ,
317a3f5d11SAllan Jude.Nm SHA384_FileChunk ,
321780e407SAllan Jude.Nm SHA384_Data ,
332768d705SDag-Erling Smørgrav.Nm SHA512_224_Init ,
342768d705SDag-Erling Smørgrav.Nm SHA512_224_Update ,
352768d705SDag-Erling Smørgrav.Nm SHA512_224_Final ,
362768d705SDag-Erling Smørgrav.Nm SHA512_224_End ,
372768d705SDag-Erling Smørgrav.Nm SHA512_224_File ,
382768d705SDag-Erling Smørgrav.Nm SHA512_224_FileChunk ,
392768d705SDag-Erling Smørgrav.Nm SHA512_224_Data
401780e407SAllan Jude.Nm SHA512_256_Init ,
411780e407SAllan Jude.Nm SHA512_256_Update ,
421780e407SAllan Jude.Nm SHA512_256_Final ,
431780e407SAllan Jude.Nm SHA512_256_End ,
44*fd3ced15SKyle Evans.Nm SHA512_256_Fd ,
45*fd3ced15SKyle Evans.Nm SHA512_256_FdChunk ,
461780e407SAllan Jude.Nm SHA512_256_File ,
471780e407SAllan Jude.Nm SHA512_256_FileChunk ,
481780e407SAllan Jude.Nm SHA512_256_Data
497a3f5d11SAllan Jude.Nd calculate the FIPS 180-4 ``SHA-512'' family of message digests
503b50f6bfSMark Murray.Sh LIBRARY
513b50f6bfSMark Murray.Lb libmd
523b50f6bfSMark Murray.Sh SYNOPSIS
533b50f6bfSMark Murray.In sys/types.h
543b50f6bfSMark Murray.In sha512.h
553b50f6bfSMark Murray.Ft void
563b50f6bfSMark Murray.Fn SHA512_Init "SHA512_CTX *context"
573b50f6bfSMark Murray.Ft void
583b50f6bfSMark Murray.Fn SHA512_Update "SHA512_CTX *context" "const unsigned char *data" "size_t len"
593b50f6bfSMark Murray.Ft void
603b50f6bfSMark Murray.Fn SHA512_Final "unsigned char digest[64]" "SHA512_CTX *context"
613b50f6bfSMark Murray.Ft "char *"
623b50f6bfSMark Murray.Fn SHA512_End "SHA512_CTX *context" "char *buf"
633b50f6bfSMark Murray.Ft "char *"
64*fd3ced15SKyle Evans.Fn SHA512_Fd "int fd" "char *buf"
65*fd3ced15SKyle Evans.Ft "char *"
66*fd3ced15SKyle Evans.Fn SHA512_FdChunk "int fd" "char *buf" "off_t offset" "off_t length"
67*fd3ced15SKyle Evans.Ft "char *"
683b50f6bfSMark Murray.Fn SHA512_File "const char *filename" "char *buf"
693b50f6bfSMark Murray.Ft "char *"
703b50f6bfSMark Murray.Fn SHA512_FileChunk "const char *filename" "char *buf" "off_t offset" "off_t length"
713b50f6bfSMark Murray.Ft "char *"
723b50f6bfSMark Murray.Fn SHA512_Data "const unsigned char *data" "unsigned int len" "char *buf"
731780e407SAllan Jude.In sha384.h
747a3f5d11SAllan Jude.Ft void
757a3f5d11SAllan Jude.Fn SHA384_Init "SHA384_CTX *context"
767a3f5d11SAllan Jude.Ft void
777a3f5d11SAllan Jude.Fn SHA384_Update "SHA384_CTX *context" "const unsigned char *data" "size_t len"
787a3f5d11SAllan Jude.Ft void
797a3f5d11SAllan Jude.Fn SHA384_Final "unsigned char digest[48]" "SHA384_CTX *context"
807a3f5d11SAllan Jude.Ft "char *"
817a3f5d11SAllan Jude.Fn SHA384_End "SHA384_CTX *context" "char *buf"
827a3f5d11SAllan Jude.Ft "char *"
83*fd3ced15SKyle Evans.Fn SHA384_Fd "int fd" "char *buf"
84*fd3ced15SKyle Evans.Ft "char *"
85*fd3ced15SKyle Evans.Fn SHA384_FdChunk "int fd" "char *buf" "off_t offset" "off_t length"
86*fd3ced15SKyle Evans.Ft "char *"
877a3f5d11SAllan Jude.Fn SHA384_File "const char *filename" "char *buf"
887a3f5d11SAllan Jude.Ft "char *"
897a3f5d11SAllan Jude.Fn SHA384_FileChunk "const char *filename" "char *buf" "off_t offset" "off_t length"
907a3f5d11SAllan Jude.Ft "char *"
917a3f5d11SAllan Jude.Fn SHA384_Data "const unsigned char *data" "unsigned int len" "char *buf"
921780e407SAllan Jude.In sha512t.h
931780e407SAllan Jude.Ft void
942768d705SDag-Erling Smørgrav.Fn SHA512_224_Init "SHA512_CTX *context"
952768d705SDag-Erling Smørgrav.Ft void
962768d705SDag-Erling Smørgrav.Fn SHA512_224_Update "SHA512_CTX *context" "const unsigned char *data" "size_t len"
972768d705SDag-Erling Smørgrav.Ft void
982768d705SDag-Erling Smørgrav.Fn SHA512_224_Final "unsigned char digest[32]" "SHA512_CTX *context"
992768d705SDag-Erling Smørgrav.Ft "char *"
1002768d705SDag-Erling Smørgrav.Fn SHA512_224_End "SHA512_CTX *context" "char *buf"
1012768d705SDag-Erling Smørgrav.Ft "char *"
1022768d705SDag-Erling Smørgrav.Fn SHA512_224_File "const char *filename" "char *buf"
1032768d705SDag-Erling Smørgrav.Ft "char *"
1042768d705SDag-Erling Smørgrav.Fn SHA512_224_FileChunk "const char *filename" "char *buf" "off_t offset" "off_t length"
1052768d705SDag-Erling Smørgrav.Ft "char *"
1062768d705SDag-Erling Smørgrav.Fn SHA512_224_Data "const unsigned char *data" "unsigned int len" "char *buf"
1072768d705SDag-Erling Smørgrav.Ft void
1081780e407SAllan Jude.Fn SHA512_256_Init "SHA512_CTX *context"
1091780e407SAllan Jude.Ft void
1101780e407SAllan Jude.Fn SHA512_256_Update "SHA512_CTX *context" "const unsigned char *data" "size_t len"
1111780e407SAllan Jude.Ft void
1121780e407SAllan Jude.Fn SHA512_256_Final "unsigned char digest[32]" "SHA512_CTX *context"
1131780e407SAllan Jude.Ft "char *"
1141780e407SAllan Jude.Fn SHA512_256_End "SHA512_CTX *context" "char *buf"
1151780e407SAllan Jude.Ft "char *"
116*fd3ced15SKyle Evans.Fn SHA512_256_Fd "int fd" "char *buf"
117*fd3ced15SKyle Evans.Ft "char *"
118*fd3ced15SKyle Evans.Fn SHA512_256_FdChunk "int fd" "char *buf" "off_t offset" "off_t length"
119*fd3ced15SKyle Evans.Ft "char *"
1201780e407SAllan Jude.Fn SHA512_256_File "const char *filename" "char *buf"
1211780e407SAllan Jude.Ft "char *"
1221780e407SAllan Jude.Fn SHA512_256_FileChunk "const char *filename" "char *buf" "off_t offset" "off_t length"
1231780e407SAllan Jude.Ft "char *"
1241780e407SAllan Jude.Fn SHA512_256_Data "const unsigned char *data" "unsigned int len" "char *buf"
1253b50f6bfSMark Murray.Sh DESCRIPTION
1263b50f6bfSMark MurrayThe
1273b50f6bfSMark Murray.Li SHA512_
1283b50f6bfSMark Murrayfunctions calculate a 512-bit cryptographic checksum (digest)
1293b50f6bfSMark Murrayfor any number of input bytes.
1303b50f6bfSMark MurrayA cryptographic checksum is a one-way
1313b50f6bfSMark Murrayhash function; that is, it is computationally impractical to find
1323b50f6bfSMark Murraythe input corresponding to a particular output.
1333b50f6bfSMark MurrayThis net result is
1343b50f6bfSMark Murraya
1353b50f6bfSMark Murray.Dq fingerprint
1363b50f6bfSMark Murrayof the input-data, which does not disclose the actual input.
1373b50f6bfSMark Murray.Pp
1383b50f6bfSMark MurrayThe
1393b50f6bfSMark Murray.Fn SHA512_Init ,
1403b50f6bfSMark Murray.Fn SHA512_Update ,
1413b50f6bfSMark Murrayand
1423b50f6bfSMark Murray.Fn SHA512_Final
1433b50f6bfSMark Murrayfunctions are the core functions.
1443b50f6bfSMark MurrayAllocate an
1453b50f6bfSMark Murray.Vt SHA512_CTX ,
1463b50f6bfSMark Murrayinitialize it with
1473b50f6bfSMark Murray.Fn SHA512_Init ,
1483b50f6bfSMark Murrayrun over the data with
1493b50f6bfSMark Murray.Fn SHA512_Update ,
1503b50f6bfSMark Murrayand finally extract the result using
15166bdf50fSXin LI.Fn SHA512_Final ,
15266bdf50fSXin LIwhich will also erase the
15366bdf50fSXin LI.Vt SHA512_CTX .
1543b50f6bfSMark Murray.Pp
1553b50f6bfSMark Murray.Fn SHA512_End
1563b50f6bfSMark Murrayis a wrapper for
1573b50f6bfSMark Murray.Fn SHA512_Final
1581780e407SAllan Judewhich converts the return value to a 129-character
1593b50f6bfSMark Murray(including the terminating '\e0')
1602768d705SDag-Erling SmørgravASCII string which represents the 512 bits in hexadecimal.
1613b50f6bfSMark Murray.Pp
1623b50f6bfSMark Murray.Fn SHA512_File
1633b50f6bfSMark Murraycalculates the digest of a file, and uses
1643b50f6bfSMark Murray.Fn SHA512_End
1653b50f6bfSMark Murrayto return the result.
1663b50f6bfSMark MurrayIf the file cannot be opened, a null pointer is returned.
1673b50f6bfSMark Murray.Fn SHA512_FileChunk
1683b50f6bfSMark Murrayis similar to
1693b50f6bfSMark Murray.Fn SHA512_File ,
1703b50f6bfSMark Murraybut it only calculates the digest over a byte-range of the file specified,
1713b50f6bfSMark Murraystarting at
1723b50f6bfSMark Murray.Fa offset
1733b50f6bfSMark Murrayand spanning
1743b50f6bfSMark Murray.Fa length
1753b50f6bfSMark Murraybytes.
1763b50f6bfSMark MurrayIf the
1773b50f6bfSMark Murray.Fa length
1783b50f6bfSMark Murrayparameter is specified as 0, or more than the length of the remaining part
1793b50f6bfSMark Murrayof the file,
1803b50f6bfSMark Murray.Fn SHA512_FileChunk
1813b50f6bfSMark Murraycalculates the digest from
1823b50f6bfSMark Murray.Fa offset
1833b50f6bfSMark Murrayto the end of file.
1843b50f6bfSMark Murray.Fn SHA512_Data
1853b50f6bfSMark Murraycalculates the digest of a chunk of data in memory, and uses
1863b50f6bfSMark Murray.Fn SHA512_End
1873b50f6bfSMark Murrayto return the result.
1883b50f6bfSMark Murray.Pp
189*fd3ced15SKyle EvansThe
190*fd3ced15SKyle Evans.Fn SHA512_Fd
191*fd3ced15SKyle Evansand
192*fd3ced15SKyle Evans.Fn SHA512_FdChunk
193*fd3ced15SKyle Evansfunctions are identical to their
194*fd3ced15SKyle Evans.Fn SHA512_File
195*fd3ced15SKyle Evansand
196*fd3ced15SKyle Evans.Fn SHA512_FileChunk
197*fd3ced15SKyle Evanscounterparts, with the exception that the first argument is an
198*fd3ced15SKyle Evans.Fa fd
199*fd3ced15SKyle Evansinstead of a
200*fd3ced15SKyle Evans.Fa filename .
201*fd3ced15SKyle Evans.Pp
2023b50f6bfSMark MurrayWhen using
2033b50f6bfSMark Murray.Fn SHA512_End ,
2043b50f6bfSMark Murray.Fn SHA512_File ,
2053b50f6bfSMark Murrayor
2063b50f6bfSMark Murray.Fn SHA512_Data ,
2073b50f6bfSMark Murraythe
2083b50f6bfSMark Murray.Fa buf
2093b50f6bfSMark Murrayargument can be a null pointer, in which case the returned string
2103b50f6bfSMark Murrayis allocated with
2113b50f6bfSMark Murray.Xr malloc 3
2123b50f6bfSMark Murrayand subsequently must be explicitly deallocated using
2133b50f6bfSMark Murray.Xr free 3
2143b50f6bfSMark Murrayafter use.
2153b50f6bfSMark MurrayIf the
2163b50f6bfSMark Murray.Fa buf
2171780e407SAllan Judeargument is non-null it must point to at least 129 characters of buffer space.
2187a3f5d11SAllan Jude.Pp
2197a3f5d11SAllan JudeThe
2202768d705SDag-Erling Smørgrav.Li SHA384_ ,
2212768d705SDag-Erling Smørgrav.Li SHA512_224 ,
2221780e407SAllan Judeand
2231780e407SAllan Jude.Li SHA512_256_
2247a3f5d11SAllan Judefunctions are identical to the
2257a3f5d11SAllan Jude.Li SHA512_
2267a3f5d11SAllan Judefunctions except they use a different initial hash value and the output is
2272768d705SDag-Erling Smørgravtruncated to 384, 224, and 256 bits respectively.
2287a3f5d11SAllan Jude.Pp
2297a3f5d11SAllan Jude.Fn SHA384_End
2307a3f5d11SAllan Judeis a wrapper for
2317a3f5d11SAllan Jude.Fn SHA384_Final
2321780e407SAllan Judewhich converts the return value to a 97-character
2337a3f5d11SAllan Jude(including the terminating '\e0')
2342768d705SDag-Erling SmørgravASCII string which represents the 384 bits in hexadecimal.
2352768d705SDag-Erling Smørgrav.Pp
2362768d705SDag-Erling Smørgrav.Fn SHA512_224_End
2372768d705SDag-Erling Smørgravis a wrapper for
2382768d705SDag-Erling Smørgrav.Fn SHA512_Final
2392768d705SDag-Erling Smørgravwhich converts the return value to a 57-character
2402768d705SDag-Erling Smørgrav(including the terminating '\e0')
2412768d705SDag-Erling SmørgravASCII string which represents the 224 bits in hexadecimal.
2422768d705SDag-Erling Smørgrav.Pp
2432768d705SDag-Erling Smørgrav.Fn SHA512_224_End
2442768d705SDag-Erling Smørgravis a wrapper for
2452768d705SDag-Erling Smørgrav.Fn SHA512_Final
2462768d705SDag-Erling Smørgravwhich converts the return value to a 57-character
2472768d705SDag-Erling Smørgrav(including the terminating '\e0')
2487a3f5d11SAllan Jude.Tn ASCII
2492768d705SDag-Erling Smørgravstring which represents the 224 bits in hexadecimal.
2501780e407SAllan Jude.Pp
2511780e407SAllan Jude.Fn SHA512_256_End
2521780e407SAllan Judeis a wrapper for
2531780e407SAllan Jude.Fn SHA512_Final
2541780e407SAllan Judewhich converts the return value to a 65-character
2551780e407SAllan Jude(including the terminating '\e0')
2562768d705SDag-Erling SmørgravASCII string which represents the 256 bits in hexadecimal.
257f26f4cf1SAllan Jude.Sh ERRORS
258f26f4cf1SAllan JudeThe
259f26f4cf1SAllan Jude.Fn SHA512_End
260f26f4cf1SAllan Judefunction called with a null buf argument may fail and return NULL if:
261f26f4cf1SAllan Jude.Bl -tag -width Er
262f26f4cf1SAllan Jude.It Bq Er ENOMEM
263f26f4cf1SAllan JudeInsufficient storage space is available.
264f26f4cf1SAllan Jude.El
265f26f4cf1SAllan Jude.Pp
266f26f4cf1SAllan JudeThe
267f26f4cf1SAllan Jude.Fn SHA512_File
268f26f4cf1SAllan Judeand
269f26f4cf1SAllan Jude.Fn SHA512_FileChunk
270f26f4cf1SAllan Judemay return NULL when underlying
271f26f4cf1SAllan Jude.Xr open 2 ,
272f26f4cf1SAllan Jude.Xr fstat 2 ,
273f26f4cf1SAllan Jude.Xr lseek 2 ,
274f26f4cf1SAllan Judeor
275d491167bSJens Schweikhardt.Xr SHA512_End 3
276f26f4cf1SAllan Judefail.
2773b50f6bfSMark Murray.Sh SEE ALSO
2783b50f6bfSMark Murray.Xr md4 3 ,
2793b50f6bfSMark Murray.Xr md5 3 ,
2803b50f6bfSMark Murray.Xr ripemd 3 ,
281b468a9ffSAllan Jude.Xr sha 3 ,
282b468a9ffSAllan Jude.Xr sha256 3 ,
283b468a9ffSAllan Jude.Xr sha512 3 ,
284b468a9ffSAllan Jude.Xr skein 3
2853b50f6bfSMark Murray.Sh HISTORY
2863b50f6bfSMark MurrayThese functions appeared in
28702d98cd4SColin Percival.Fx 9.0 .
2883b50f6bfSMark Murray.Sh AUTHORS
2893b50f6bfSMark MurrayThe core hash routines were implemented by Colin Percival based on
2902768d705SDag-Erling Smørgravthe published FIPS 180-2 standard.
2913b50f6bfSMark Murray.Sh BUGS
2923b50f6bfSMark MurrayNo method is known to exist which finds two files having the same hash value,
2933b50f6bfSMark Murraynor to find a file with a specific hash value.
2943b50f6bfSMark MurrayThere is on the other hand no guarantee that such a method does not exist.
295