xref: /freebsd/lib/libmd/skein.3 (revision fd3ced15070885c818b74a44a0fbe45ed8687f44)
1b468a9ffSAllan Jude.\"-
2b468a9ffSAllan Jude.\" Copyright (c) 2016 Allan Jude
3b468a9ffSAllan Jude.\" All rights reserved.
4b468a9ffSAllan Jude.\"
5b468a9ffSAllan Jude.\" Redistribution and use in source and binary forms, with or without
6b468a9ffSAllan Jude.\" modification, are permitted provided that the following conditions
7b468a9ffSAllan Jude.\" are met:
8b468a9ffSAllan Jude.\" 1. Redistributions of source code must retain the above copyright
9b468a9ffSAllan Jude.\"    notice, this list of conditions and the following disclaimer.
10b468a9ffSAllan Jude.\" 2. Redistributions in binary form must reproduce the above copyright
11b468a9ffSAllan Jude.\"    notice, this list of conditions and the following disclaimer in the
12b468a9ffSAllan Jude.\"    documentation and/or other materials provided with the distribution.
13b468a9ffSAllan Jude.\"
14b468a9ffSAllan Jude.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15b468a9ffSAllan Jude.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16b468a9ffSAllan Jude.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17b468a9ffSAllan Jude.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18b468a9ffSAllan Jude.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19b468a9ffSAllan Jude.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20b468a9ffSAllan Jude.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21b468a9ffSAllan Jude.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22b468a9ffSAllan Jude.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23b468a9ffSAllan Jude.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24b468a9ffSAllan Jude.\" SUCH DAMAGE.
25b468a9ffSAllan Jude.\"
26*fd3ced15SKyle Evans.Dd March 8, 2022
27b468a9ffSAllan Jude.Dt SKEIN 3
28b468a9ffSAllan Jude.Os
29b468a9ffSAllan Jude.Sh NAME
30b468a9ffSAllan Jude.Nm SKEIN256_Init ,
31b468a9ffSAllan Jude.Nm SKEIN256_Update ,
32b468a9ffSAllan Jude.Nm SKEIN256_Final ,
33b468a9ffSAllan Jude.Nm SKEIN256_End ,
34*fd3ced15SKyle Evans.Nm SKEIN256_Fd ,
35*fd3ced15SKyle Evans.Nm SKEIN256_FdChunk ,
36b468a9ffSAllan Jude.Nm SKEIN256_File ,
37b468a9ffSAllan Jude.Nm SKEIN256_FileChunk ,
38b468a9ffSAllan Jude.Nm SKEIN256_Data ,
39b468a9ffSAllan Jude.Nm SKEIN512_Init ,
40b468a9ffSAllan Jude.Nm SKEIN512_Update ,
41b468a9ffSAllan Jude.Nm SKEIN512_Final ,
42b468a9ffSAllan Jude.Nm SKEIN512_End ,
43*fd3ced15SKyle Evans.Nm SKEIN512_Fd ,
44*fd3ced15SKyle Evans.Nm SKEIN512_FdChunk ,
45b468a9ffSAllan Jude.Nm SKEIN512_File ,
46b468a9ffSAllan Jude.Nm SKEIN512_FileChunk ,
47b468a9ffSAllan Jude.Nm SKEIN512_Data ,
48b468a9ffSAllan Jude.Nm SKEIN1024_Init ,
49b468a9ffSAllan Jude.Nm SKEIN1024_Update ,
50b468a9ffSAllan Jude.Nm SKEIN1024_Final ,
51b468a9ffSAllan Jude.Nm SKEIN1024_End ,
52*fd3ced15SKyle Evans.Nm SKEIN1024_Fd ,
53*fd3ced15SKyle Evans.Nm SKEIN1024_FdChunk ,
54b468a9ffSAllan Jude.Nm SKEIN1024_File ,
55b468a9ffSAllan Jude.Nm SKEIN1024_FileChunk ,
56b468a9ffSAllan Jude.Nm SKEIN1024_Data
57b468a9ffSAllan Jude.Nd calculate the ``SKEIN'' family of message digests
58b468a9ffSAllan Jude.Sh LIBRARY
59b468a9ffSAllan Jude.Lb libmd
60b468a9ffSAllan Jude.Sh SYNOPSIS
61b468a9ffSAllan Jude.In sys/types.h
62b468a9ffSAllan Jude.In skein.h
63b468a9ffSAllan Jude.Ft void
64b468a9ffSAllan Jude.Fn SKEIN256_Init "SKEIN256_CTX *context"
65b468a9ffSAllan Jude.Ft void
66b468a9ffSAllan Jude.Fn SKEIN256_Update "SKEIN256_CTX *context" "const unsigned char *data" "size_t len"
67b468a9ffSAllan Jude.Ft void
68b468a9ffSAllan Jude.Fn SKEIN256_Final "unsigned char digest[32]" "SKEIN256_CTX *context"
69b468a9ffSAllan Jude.Ft "char *"
70b468a9ffSAllan Jude.Fn SKEIN256_End "SKEIN256_CTX *context" "char *buf"
71b468a9ffSAllan Jude.Ft "char *"
72*fd3ced15SKyle Evans.Fn SKEIN256_Fd "int fd" "char *buf"
73*fd3ced15SKyle Evans.Ft "char *"
74*fd3ced15SKyle Evans.Fn SKEIN256_FdChunk "int fd" "char *buf" "off_t offset" "off_t length"
75*fd3ced15SKyle Evans.Ft "char *"
76b468a9ffSAllan Jude.Fn SKEIN256_File "const char *filename" "char *buf"
77b468a9ffSAllan Jude.Ft "char *"
78b468a9ffSAllan Jude.Fn SKEIN256_FileChunk "const char *filename" "char *buf" "off_t offset" "off_t length"
79b468a9ffSAllan Jude.Ft "char *"
80b468a9ffSAllan Jude.Fn SKEIN256_Data "const unsigned char *data" "unsigned int len" "char *buf"
81b468a9ffSAllan Jude.Ft void
82b468a9ffSAllan Jude.Fn SKEIN512_Init "SKEIN512_CTX *context"
83b468a9ffSAllan Jude.Ft void
84b468a9ffSAllan Jude.Fn SKEIN512_Update "SKEIN512_CTX *context" "const unsigned char *data" "size_t len"
85b468a9ffSAllan Jude.Ft void
86b468a9ffSAllan Jude.Fn SKEIN512_Final "unsigned char digest[64]" "SKEIN512_CTX *context"
87b468a9ffSAllan Jude.Ft "char *"
88b468a9ffSAllan Jude.Fn SKEIN512_End "SKEIN512_CTX *context" "char *buf"
89b468a9ffSAllan Jude.Ft "char *"
90*fd3ced15SKyle Evans.Fn SKEIN512_Fd "int fd" "char *buf"
91*fd3ced15SKyle Evans.Ft "char *"
92*fd3ced15SKyle Evans.Fn SKEIN512_FdChunk "int fd" "char *buf" "off_t offset" "off_t length"
93*fd3ced15SKyle Evans.Ft "char *"
94b468a9ffSAllan Jude.Fn SKEIN512_File "const char *filename" "char *buf"
95b468a9ffSAllan Jude.Ft "char *"
96b468a9ffSAllan Jude.Fn SKEIN512_FileChunk "const char *filename" "char *buf" "off_t offset" "off_t length"
97b468a9ffSAllan Jude.Ft "char *"
98b468a9ffSAllan Jude.Fn SKEIN512_Data "const unsigned char *data" "unsigned int len" "char *buf"
99b468a9ffSAllan Jude.Ft void
100b468a9ffSAllan Jude.Fn SKEIN1024_Init "SKEIN1024_CTX *context"
101b468a9ffSAllan Jude.Ft void
102b468a9ffSAllan Jude.Fn SKEIN1024_Update "SKEIN1024_CTX *context" "const unsigned char *data" "size_t len"
103b468a9ffSAllan Jude.Ft void
104b468a9ffSAllan Jude.Fn SKEIN1024_Final "unsigned char digest[128]" "SKEIN1024_CTX *context"
105b468a9ffSAllan Jude.Ft "char *"
106b468a9ffSAllan Jude.Fn SKEIN1024_End "SKEIN1024_CTX *context" "char *buf"
107b468a9ffSAllan Jude.Ft "char *"
108*fd3ced15SKyle Evans.Fn SKEIN1024_Fd "int fd" "char *buf"
109*fd3ced15SKyle Evans.Ft "char *"
110*fd3ced15SKyle Evans.Fn SKEIN1024_FdChunk "int fd" "char *buf" "off_t offset" "off_t length"
111*fd3ced15SKyle Evans.Ft "char *"
112b468a9ffSAllan Jude.Fn SKEIN1024_File "const char *filename" "char *buf"
113b468a9ffSAllan Jude.Ft "char *"
114b468a9ffSAllan Jude.Fn SKEIN1024_FileChunk "const char *filename" "char *buf" "off_t offset" "off_t length"
115b468a9ffSAllan Jude.Ft "char *"
116b468a9ffSAllan Jude.Fn SKEIN1024_Data "const unsigned char *data" "unsigned int len" "char *buf"
117b468a9ffSAllan Jude.Sh DESCRIPTION
118b468a9ffSAllan Jude.Li Skein
119b468a9ffSAllan Judeis a new family of cryptographic hash functions based on the
120b468a9ffSAllan Jude.Li Threefish
121b468a9ffSAllan Judelarge-block cipher.
122b468a9ffSAllan JudeIts design combines speed, security, simplicity, and a great deal of
123b468a9ffSAllan Judeflexibility in a modular package that is easy to analyze.
124b468a9ffSAllan Jude.Li Skein
125b468a9ffSAllan Judeis defined for three different internal state sizes\(em256 bits, 512 bits, and
126b468a9ffSAllan Jude1024 bits\(emand any output size.
127b468a9ffSAllan JudeThis allows Skein to be a drop-in replacement for the entire SHA family
128b468a9ffSAllan Judeof hash functions.
129b468a9ffSAllan Jude.Pp
130b468a9ffSAllan JudeThe
131b468a9ffSAllan Jude.Fn SKEIN256_Init ,
132b468a9ffSAllan Jude.Fn SKEIN256_Update ,
133b468a9ffSAllan Judeand
134b468a9ffSAllan Jude.Fn SKEIN256_Final
135b468a9ffSAllan Judefunctions are the core functions.
136b468a9ffSAllan JudeAllocate an
137b468a9ffSAllan Jude.Vt SKEIN256_CTX ,
138b468a9ffSAllan Judeinitialize it with
139b468a9ffSAllan Jude.Fn SKEIN256_Init ,
140b468a9ffSAllan Juderun over the data with
141b468a9ffSAllan Jude.Fn SKEIN256_Update ,
142b468a9ffSAllan Judeand finally extract the result using
14366bdf50fSXin LI.Fn SKEIN256_Final ,
14466bdf50fSXin LIwhich will also erase the
14566bdf50fSXin LI.Vt SKEIN256_CTX .
146b468a9ffSAllan Jude.Pp
147b468a9ffSAllan Jude.Fn SKEIN256_End
148b468a9ffSAllan Judeis a wrapper for
149b468a9ffSAllan Jude.Fn SKEIN256_Final
150b468a9ffSAllan Judewhich converts the return value to a 33-character
151b468a9ffSAllan Jude(including the terminating '\e0')
1522768d705SDag-Erling SmørgravASCII string which represents the 256 bits in hexadecimal.
153b468a9ffSAllan Jude.Pp
154b468a9ffSAllan Jude.Fn SKEIN256_File
155b468a9ffSAllan Judecalculates the digest of a file, and uses
156b468a9ffSAllan Jude.Fn SKEIN256_End
157b468a9ffSAllan Judeto return the result.
158b468a9ffSAllan JudeIf the file cannot be opened, a null pointer is returned.
159b468a9ffSAllan Jude.Fn SKEIN256_FileChunk
160b468a9ffSAllan Judeis similar to
161b468a9ffSAllan Jude.Fn SKEIN256_File ,
162b468a9ffSAllan Judebut it only calculates the digest over a byte-range of the file specified,
163b468a9ffSAllan Judestarting at
164b468a9ffSAllan Jude.Fa offset
165b468a9ffSAllan Judeand spanning
166b468a9ffSAllan Jude.Fa length
167b468a9ffSAllan Judebytes.
168b468a9ffSAllan JudeIf the
169b468a9ffSAllan Jude.Fa length
170b468a9ffSAllan Judeparameter is specified as 0, or more than the length of the remaining part
171b468a9ffSAllan Judeof the file,
172b468a9ffSAllan Jude.Fn SKEIN256_FileChunk
173b468a9ffSAllan Judecalculates the digest from
174b468a9ffSAllan Jude.Fa offset
175b468a9ffSAllan Judeto the end of file.
176b468a9ffSAllan Jude.Fn SKEIN256_Data
177b468a9ffSAllan Judecalculates the digest of a chunk of data in memory, and uses
178b468a9ffSAllan Jude.Fn SKEIN256_End
179b468a9ffSAllan Judeto return the result.
180b468a9ffSAllan Jude.Pp
181*fd3ced15SKyle EvansThe
182*fd3ced15SKyle Evans.Fn SKEIN256_Fd
183*fd3ced15SKyle Evansand
184*fd3ced15SKyle Evans.Fn SKEIN256_FdChunk
185*fd3ced15SKyle Evansfunctions are identical to their
186*fd3ced15SKyle Evans.Fn SKEIN256_File
187*fd3ced15SKyle Evansand
188*fd3ced15SKyle Evans.Fn SKEIN256_FileChunk
189*fd3ced15SKyle Evanscounterparts, with the exception that the first argument is an
190*fd3ced15SKyle Evans.Fa fd
191*fd3ced15SKyle Evansinstead of a
192*fd3ced15SKyle Evans.Fa filename .
193*fd3ced15SKyle Evans.Pp
194b468a9ffSAllan JudeWhen using
195b468a9ffSAllan Jude.Fn SKEIN256_End ,
196b468a9ffSAllan Jude.Fn SKEIN256_File ,
197b468a9ffSAllan Judeor
198b468a9ffSAllan Jude.Fn SKEIN256_Data ,
199b468a9ffSAllan Judethe
200b468a9ffSAllan Jude.Fa buf
201b468a9ffSAllan Judeargument can be a null pointer, in which case the returned string
202b468a9ffSAllan Judeis allocated with
203b468a9ffSAllan Jude.Xr malloc 3
204b468a9ffSAllan Judeand subsequently must be explicitly deallocated using
205b468a9ffSAllan Jude.Xr free 3
206b468a9ffSAllan Judeafter use.
207b468a9ffSAllan JudeIf the
208b468a9ffSAllan Jude.Fa buf
209b468a9ffSAllan Judeargument is non-null it must point to at least 33 characters of buffer space.
210b468a9ffSAllan Jude.Pp
211b468a9ffSAllan JudeThe
212b468a9ffSAllan Jude.Li SKEIN512_
213b468a9ffSAllan Judeand
214b468a9ffSAllan Jude.Li SKEIN1024_
215b468a9ffSAllan Judefunctions are similar to the
216b468a9ffSAllan Jude.Li SKEIN256_
217b468a9ffSAllan Judefunctions except they produce a 512-bit, 65 character,
218b468a9ffSAllan Judeor 1024-bit, 129 character, output.
219f26f4cf1SAllan Jude.Sh ERRORS
220f26f4cf1SAllan JudeThe
221f26f4cf1SAllan Jude.Fn SKEIN256_End
222f26f4cf1SAllan Judefunction called with a null buf argument may fail and return NULL if:
223f26f4cf1SAllan Jude.Bl -tag -width Er
224f26f4cf1SAllan Jude.It Bq Er ENOMEM
225f26f4cf1SAllan JudeInsufficient storage space is available.
226f26f4cf1SAllan Jude.El
227f26f4cf1SAllan Jude.Pp
228f26f4cf1SAllan JudeThe
229f26f4cf1SAllan Jude.Fn SKEIN256_File
230f26f4cf1SAllan Judeand
231f26f4cf1SAllan Jude.Fn SKEIN256_FileChunk
232f26f4cf1SAllan Judemay return NULL when underlying
233f26f4cf1SAllan Jude.Xr open 2 ,
234f26f4cf1SAllan Jude.Xr fstat 2 ,
235f26f4cf1SAllan Jude.Xr lseek 2 ,
236f26f4cf1SAllan Judeor
237d491167bSJens Schweikhardt.Xr SKEIN256_End 3
238f26f4cf1SAllan Judefail.
239b468a9ffSAllan Jude.Sh SEE ALSO
240b468a9ffSAllan Jude.Xr md4 3 ,
241b468a9ffSAllan Jude.Xr md5 3 ,
242b468a9ffSAllan Jude.Xr ripemd 3 ,
243b468a9ffSAllan Jude.Xr sha 3 ,
244b468a9ffSAllan Jude.Xr sha256 3 ,
245b468a9ffSAllan Jude.Xr sha512 3
246b468a9ffSAllan Jude.Sh HISTORY
247b468a9ffSAllan JudeThese functions appeared in
248b468a9ffSAllan Jude.Fx 11.0 .
249b468a9ffSAllan Jude.Sh AUTHORS
250b468a9ffSAllan Jude.An -nosplit
251b468a9ffSAllan JudeThe core hash routines were imported from version 1.3 of the optimized
252b468a9ffSAllan JudeSkein reference implementation written by
253b468a9ffSAllan Jude.An Doug Whiting
254b468a9ffSAllan Judeas submitted to the NSA SHA-3 contest.
255b468a9ffSAllan JudeThe algorithms were developed by
256b468a9ffSAllan Jude.An Niels Ferguson ,
257b468a9ffSAllan Jude.An Stefan Lucks ,
258b468a9ffSAllan Jude.An Bruce Schneier ,
259b468a9ffSAllan Jude.An Doug Whiting ,
260b468a9ffSAllan Jude.An Mihir Bellare ,
261b468a9ffSAllan Jude.An Tadayoshi Kohno ,
262b468a9ffSAllan Jude.An Jon Callas,
263b468a9ffSAllan Judeand
264b468a9ffSAllan Jude.An Jesse Walker .
265