xref: /freebsd/lib/libmd/ripemd.3 (revision a0ee8cc6)
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 March 28, 2014
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.Sh HISTORY
130These functions appeared in
131.Fx 4.0 .
132.Sh AUTHORS
133The core hash routines were implemented by Eric Young based on the
134published
135.Tn RIPEMD160
136specification.
137.Sh BUGS
138No method is known to exist which finds two files having the same hash value,
139nor to find a file with a specific hash value.
140There is on the other hand no guarantee that such a method does not exist.
141