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