1c177a86bSGarrett Wollman.\" 2c177a86bSGarrett Wollman.\" ---------------------------------------------------------------------------- 3c177a86bSGarrett Wollman.\" "THE BEER-WARE LICENSE" (Revision 42): 4c177a86bSGarrett Wollman.\" <phk@login.dkuug.dk> wrote this file. As long as you retain this notice you 5c177a86bSGarrett Wollman.\" can do whatever you want with this stuff. If we meet some day, and you think 6c177a86bSGarrett Wollman.\" this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp 7c177a86bSGarrett Wollman.\" ---------------------------------------------------------------------------- 8c177a86bSGarrett Wollman.\" 9c177a86bSGarrett Wollman.\" From: Id: mdX.3,v 1.14 1999/02/11 20:31:49 wollman Exp 10d00ed299SGarrett Wollman.\" $Id: sha.3,v 1.1 1999/02/26 04:24:56 wollman Exp $ 11c177a86bSGarrett Wollman.\" 12c177a86bSGarrett Wollman.Dd February 25, 1999 13d00ed299SGarrett Wollman.Dt SHA 3 14c177a86bSGarrett Wollman.Os FreeBSD 4.0 15c177a86bSGarrett Wollman.Sh NAME 16c177a86bSGarrett Wollman.Nm SHA_Init , 17c177a86bSGarrett Wollman.Nm SHA_Update , 18c177a86bSGarrett Wollman.Nm SHA_Final , 19c177a86bSGarrett Wollman.Nm SHA_End , 20c177a86bSGarrett Wollman.Nm SHA_File , 21c177a86bSGarrett Wollman.Nm SHA_Data , 22c177a86bSGarrett Wollman.Nm SHA1_Init , 23c177a86bSGarrett Wollman.Nm SHA1_Update , 24c177a86bSGarrett Wollman.Nm SHA1_Final , 25c177a86bSGarrett Wollman.Nm SHA1_End , 26c177a86bSGarrett Wollman.Nm SHA1_File , 27c177a86bSGarrett Wollman.Nm SHA1_Data 28c177a86bSGarrett Wollman.Nd calculate the FIPS 160 and 160-1 ``SHA'' message digests 29c177a86bSGarrett Wollman.Sh SYNOPSIS 30c177a86bSGarrett Wollman.Fd #include <sys/types.h> 31c177a86bSGarrett Wollman.Fd #include <sha.h> 32c177a86bSGarrett Wollman.Ft void 33c177a86bSGarrett Wollman.Fn SHA_Init "SHA_CTX *context" 34c177a86bSGarrett Wollman.Ft void 35c177a86bSGarrett Wollman.Fn SHA_Update "SHA_CTX *context" "const unsigned char *data" "unsigned int len" 36c177a86bSGarrett Wollman.Ft void 37c177a86bSGarrett Wollman.Fn SHA_Final "unsigned char digest[20]" "SHA_CTX *context" 38c177a86bSGarrett Wollman.Ft "char *" 39c177a86bSGarrett Wollman.Fn SHA_End "SHA_CTX *context" "char *buf" 40c177a86bSGarrett Wollman.Ft "char *" 41c177a86bSGarrett Wollman.Fn SHA_File "const char *filename" "char *buf" 42c177a86bSGarrett Wollman.Ft "char *" 43c177a86bSGarrett Wollman.Fn SHA_Data "const unsigned char *data" "unsigned int len" "char *buf" 44c177a86bSGarrett Wollman.Ft void 45c177a86bSGarrett Wollman.Fn SHA1_Init "SHA_CTX *context" 46c177a86bSGarrett Wollman.Ft void 47c177a86bSGarrett Wollman.Fn SHA1_Update "SHA_CTX *context" "const unsigned char *data" "unsigned int len" 48c177a86bSGarrett Wollman.Ft void 49c177a86bSGarrett Wollman.Fn SHA1_Final "unsigned char digest[20]" "SHA_CTX *context" 50c177a86bSGarrett Wollman.Ft "char *" 51c177a86bSGarrett Wollman.Fn SHA1_End "SHA_CTX *context" "char *buf" 52c177a86bSGarrett Wollman.Ft "char *" 53c177a86bSGarrett Wollman.Fn SHA1_File "const char *filename" "char *buf" 54c177a86bSGarrett Wollman.Ft "char *" 55c177a86bSGarrett Wollman.Fn SHA1_Data "const unsigned char *data" "unsigned int len" "char *buf" 56c177a86bSGarrett Wollman.Sh DESCRIPTION 57c177a86bSGarrett WollmanThe 58c177a86bSGarrett Wollman.Li SHA_ 59c177a86bSGarrett Wollmanand 60c177a86bSGarrett Wollman.Li SHA1_ 61c177a86bSGarrett Wollmanfunctions calculate a 160-bit cryptographic checksum (digest) 62c177a86bSGarrett Wollmanfor any number of input bytes. A cryptographic checksum is a one-way 63c177a86bSGarrett Wollmanhash function; that is, it is computationally impractical to find 64c177a86bSGarrett Wollmanthe input corresponding to a particular output. This net result is 65c177a86bSGarrett Wollmana ``fingerprint'' of the input-data, which doesn't disclose the actual 66c177a86bSGarrett Wollmaninput. 67c177a86bSGarrett Wollman.Pp 68c177a86bSGarrett Wollman.Tn SHA 69c177a86bSGarrett Wollman.Pq \&or Tn SHA-0 70c177a86bSGarrett Wollmanis the original Secure Hash Algorithm specified in 71c177a86bSGarrett Wollman.Tn FIPS 72c177a86bSGarrett Wollman160. It was quickly proven insecure, and has been superseded by 73c177a86bSGarrett Wollman.Tn SHA-1 . 74c177a86bSGarrett Wollman.Tn SHA-0 75c177a86bSGarrett Wollmanis included for compatibility purposes only. 76c177a86bSGarrett Wollman.Pp 77c177a86bSGarrett WollmanThe 78c177a86bSGarrett Wollman.Fn SHA1_Init , 79c177a86bSGarrett Wollman.Fn SHA1_Update , 80c177a86bSGarrett Wollmanand 81c177a86bSGarrett Wollman.Fn SHA1_Final 82c177a86bSGarrett Wollmanfunctions are the core functions. Allocate an SHA_CTX, initialize it with 83c177a86bSGarrett Wollman.Fn SHA1_Init , 84c177a86bSGarrett Wollmanrun over the data with 85c177a86bSGarrett Wollman.Fn SHA1_Update , 86c177a86bSGarrett Wollmanand finally extract the result using 87c177a86bSGarrett Wollman.Fn SHA1_Final . 88c177a86bSGarrett Wollman.Pp 89c177a86bSGarrett Wollman.Fn SHA1_End 90c177a86bSGarrett Wollmanis a wrapper for 91c177a86bSGarrett Wollman.Fn SHA1_Final 92c177a86bSGarrett Wollmanwhich converts the return value to a 41-character 93c177a86bSGarrett Wollman(including the terminating '\e0') 94c177a86bSGarrett Wollman.Tn ASCII 95c177a86bSGarrett Wollmanstring which represents the 160 bits in hexadecimal. 96c177a86bSGarrett Wollman.Pp 97c177a86bSGarrett Wollman.Fn SHA1_File 98c177a86bSGarrett Wollmancalculates the digest of a file, and uses 99c177a86bSGarrett Wollman.Fn SHA1_End 100c177a86bSGarrett Wollmanto return the result. 101c177a86bSGarrett WollmanIf the file cannot be opened, a null pointer is returned. 102c177a86bSGarrett Wollman.Fn SHA1_Data 103c177a86bSGarrett Wollmancalculates the digest of a chunk of data in memory, and uses 104c177a86bSGarrett Wollman.Fn SHA1_End 105c177a86bSGarrett Wollmanto return the result. 106c177a86bSGarrett Wollman.Pp 107c177a86bSGarrett WollmanWhen using 108c177a86bSGarrett Wollman.Fn SHA1_End , 109c177a86bSGarrett Wollman.Fn SHA1_File , 110c177a86bSGarrett Wollmanor 111c177a86bSGarrett Wollman.Fn SHA1_Data , 112c177a86bSGarrett Wollmanthe 113c177a86bSGarrett Wollman.Ar buf 114c177a86bSGarrett Wollmanargument can be a null pointer, in which case the returned string 115c177a86bSGarrett Wollmanis allocated with 116c177a86bSGarrett Wollman.Xr malloc 3 117c177a86bSGarrett Wollmanand subsequently must be explicitly deallocated using 118c177a86bSGarrett Wollman.Xr free 3 119c177a86bSGarrett Wollmanafter use. 120c177a86bSGarrett WollmanIf the 121c177a86bSGarrett Wollman.Ar buf 122c177a86bSGarrett Wollmanargument is non-null it must point to at least 41 characters of buffer space. 123c177a86bSGarrett Wollman.Sh SEE ALSO 124c177a86bSGarrett Wollman.Xr md2 3 , 125c177a86bSGarrett Wollman.Xr md4 3 , 126d00ed299SGarrett Wollman.Xr md5 3 , 127d00ed299SGarrett Wollman.Xr ripemd 3 128c177a86bSGarrett Wollman.Sh AUTHORS 129c177a86bSGarrett WollmanThe core hash routines were implemented by Eric Young based on the 130c177a86bSGarrett Wollmanpublished 131c177a86bSGarrett Wollman.Tn FIPS 132c177a86bSGarrett Wollmanstandards. 133c177a86bSGarrett Wollman.Sh HISTORY 134c177a86bSGarrett WollmanThese functions appeared in 135c177a86bSGarrett Wollman.Fx 4.0 . 136c177a86bSGarrett Wollman.Sh BUGS 137c177a86bSGarrett WollmanNo method is known to exist which finds two files having the same hash value, 138c177a86bSGarrett Wollmannor to find a file with a specific hash value. 139c177a86bSGarrett WollmanThere is on the other hand no guarantee that such a method doesn't exist. 140