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