** ** Source code author: Doug Whiting, 2008. ** ** This algorithm and source code is released to the public domain. ** ************************************************************************/ #include <string.h> /* get the memcpy/memset functions */ #include "skein.h" /* get the Skein API definitions */ #define MK_64 SKEIN_MK_64 /* blkSize = 512 bits. hashSize = 512 bits */ static const u64b_t SKEIN_512_IV_512[] = { MK_64(0x4903ADFF,0x749C51CE), MK_64(0x0D95DE39,0x9746DF03), MK_64(0x8FD19341,0x27C79BCE), MK_64(0x9A255629,0xFF352CB1), MK_64(0x5DB62599,0xDF6CA7B0), MK_64(0xEABE394C,0xA9D5C3F4), MK_64(0x991112C7,0x1A75B523), MK_64(0xAE18A40B,0x660FCC33) }; static void Skein_Put64_LSB_First(u08b_t *dst,const u64b_t *src,size_t bCnt) { size_t n; for (n = 0; n < bCnt; n++) dst[n] = (u08b_t)(src[n>>3] >> (8*(n&7))); }
** avoid the need for a Threefish call during Init(). ** ** The IV for any fixed hash length may be pre-computed. ** Only the most common values are included here. ** ************************************************************ **/ #define MK_64 SKEIN_MK_64 /* blkSize = 256 bits. hashSize = 128 bits */ /* blkSize = 512 bits. hashSize = 128 bits */ const u64b_t SKEIN_512_IV_128[] = { MK_64(0xA8BC7BF3,0x6FBF9F52), MK_64(0x1E9872CE,0xBD1AF0AA), MK_64(0x309B1790,0xB32190D3), MK_64(0xBCFBB854,0x3F94805C), MK_64(0x0DA61BCD,0x6E31B11B), MK_64(0x1A18EBEA,0xD46A32E3), MK_64(0xA2CC5B18,0xCE84AA82), MK_64(0x6982AB28,0x9D46982D) }; /* blkSize = 512 bits. hashSize = 160 bits */ const u64b_t SKEIN_512_IV_160[] = { MK_64(0x28B81A2A,0xE013BD91), MK_64(0xC2F11668,0xB5BDF78F), MK_64(0x1760D8F3,0xF6A56F12),
typedef crypto_uint8 uint8; #include "crypto_uint32.h" typedef crypto_uint32 uint32; #include "crypto_uint64.h" typedef crypto_uint64 uint64; #include "crypto_hash.h" #define MK_64(hi32,lo32) ((uint64) (lo32) + (((uint64) (hi32)) << 32)) #define SKEIN_VERSION (1) #define SKEIN_ID_STRING_LE (0x33414853) #define SKEIN_SCHEMA_VER MK_64(SKEIN_VERSION,SKEIN_ID_STRING_LE) #define SKEIN_KS_PARITY _mm_set_pi32(0x1BD11BDA,0xA9FC1A22) static const uint64 IV[] = { MK_64(0xCCD044A1,0x2FDB3E13), MK_64(0xE8359030,0x1A79A9EB), MK_64(0x55AEA061,0x4F816E6F), MK_64(0x2A2767A4,0xAE9B94DB), MK_64(0xEC06025E,0x74DD7683), MK_64(0xE7A436CD,0xC4746251), MK_64(0xC36FBAF9,0x393AD185), MK_64(0x3EEDBA18,0x33EDFC13) }; enum { R_512_0_0=46, R_512_0_1=36, R_512_0_2=19, R_512_0_3=37, R_512_1_0=33, R_512_1_1=27, R_512_1_2=14, R_512_1_3=42, R_512_2_0=17, R_512_2_1=49, R_512_2_2=36, R_512_2_3=39, R_512_3_0=44, R_512_3_1= 9, R_512_3_2=54, R_512_3_3=56, R_512_4_0=39, R_512_4_1=30, R_512_4_2=34, R_512_4_3=24,