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 26, 2016 13.Dt RIPEMD 3 14.Os 15.Sh NAME 16.Nm RIPEMD160_Init , 17.Nm RIPEMD160_Update , 18.Nm RIPEMD160_Final , 19.Nm RIPEMD160_End , 20.Nm RIPEMD160_File , 21.Nm RIPEMD160_FileChunk , 22.Nm RIPEMD160_Data 23.Nd calculate the RIPEMD160 message digest 24.Sh LIBRARY 25.Lb libmd 26.Sh SYNOPSIS 27.In sys/types.h 28.In ripemd.h 29.Ft void 30.Fn RIPEMD160_Init "RIPEMD160_CTX *context" 31.Ft void 32.Fn RIPEMD160_Update "RIPEMD160_CTX *context" "const unsigned char *data" "unsigned int len" 33.Ft void 34.Fn RIPEMD160_Final "unsigned char digest[20]" "RIPEMD160_CTX *context" 35.Ft "char *" 36.Fn RIPEMD160_End "RIPEMD160_CTX *context" "char *buf" 37.Ft "char *" 38.Fn RIPEMD160_File "const char *filename" "char *buf" 39.Ft "char *" 40.Fn RIPEMD160_FileChunk "const char *filename" "char *buf" "off_t offset" "off_t length" 41.Ft "char *" 42.Fn RIPEMD160_Data "const unsigned char *data" "unsigned int len" "char *buf" 43.Sh DESCRIPTION 44The 45.Li RIPEMD160_ 46functions calculate a 160-bit cryptographic checksum (digest) 47for any number of input bytes. 48A cryptographic checksum is a one-way 49hash function; that is, it is computationally impractical to find 50the input corresponding to a particular output. 51This net result is a 52.Dq fingerprint 53of the input-data, which does not disclose the actual input. 54.Pp 55The 56.Fn RIPEMD160_Init , 57.Fn RIPEMD160_Update , 58and 59.Fn RIPEMD160_Final 60functions are the core functions. 61Allocate an 62.Vt RIPEMD160_CTX , 63initialize it with 64.Fn RIPEMD160_Init , 65run over the data with 66.Fn RIPEMD160_Update , 67and finally extract the result using 68.Fn RIPEMD160_Final . 69.Pp 70The 71.Fn RIPEMD160_End 72function is a wrapper for 73.Fn RIPEMD160_Final 74which converts the return value to a 41-character 75(including the terminating '\e0') 76.Tn ASCII 77string which represents the 160 bits in hexadecimal. 78.Pp 79The 80.Fn RIPEMD160_File 81function calculates the digest of a file, and uses 82.Fn RIPEMD160_End 83to return the result. 84If the file cannot be opened, a null pointer is returned. 85The 86.Fn RIPEMD160_FileChunk 87function is similar to 88.Fn RIPEMD160_File , 89but it only calculates the digest over a byte-range of the file specified, 90starting at 91.Fa offset 92and spanning 93.Fa length 94bytes. 95If the 96.Fa length 97parameter is specified as 0, or more than the length of the remaining part 98of the file, 99.Fn RIPEMD160_FileChunk 100calculates the digest from 101.Fa offset 102to the end of file. 103The 104.Fn RIPEMD160_Data 105function calculates the digest of a chunk of data in memory, and uses 106.Fn RIPEMD160_End 107to return the result. 108.Pp 109When using 110.Fn RIPEMD160_End , 111.Fn RIPEMD160_File , 112or 113.Fn RIPEMD160_Data , 114the 115.Fa buf 116argument can be a null pointer, in which case the returned string 117is allocated with 118.Xr malloc 3 119and subsequently must be explicitly deallocated using 120.Xr free 3 121after use. 122If the 123.Fa buf 124argument is non-null it must point to at least 41 characters of buffer space. 125.Sh SEE ALSO 126.Xr md4 3 , 127.Xr md5 3 , 128.Xr sha 3 , 129.Xr sha256 3 , 130.Xr sha512 3 , 131.Xr skein 3 132.Sh HISTORY 133These functions appeared in 134.Fx 4.0 . 135.Sh AUTHORS 136The core hash routines were implemented by Eric Young based on the 137published 138.Tn RIPEMD160 139specification. 140.Sh BUGS 141No method is known to exist which finds two files having the same hash value, 142nor to find a file with a specific hash value. 143There is on the other hand no guarantee that such a method does not exist. 144