Electroneum
Classes | Macros | Enumerations | Functions | Variables
skein.c File Reference
#include <stddef.h>
#include <string.h>
#include "skein.h"
Include dependency graph for skein.c:

Classes

struct  Skein_Ctxt_Hdr_t
 
struct  Skein_256_Ctxt_t
 
struct  Skein_512_Ctxt_t
 
struct  Skein1024_Ctxt_t
 
struct  hashState
 

Macros

#define SKEIN_PORT_CODE   /* instantiate any code in skein_port.h */
 
#define DISABLE_UNUSED   0
 
#define SKEIN_256_NIST_MAX_HASHBITS   (0)
 
#define SKEIN_512_NIST_MAX_HASHBITS   (512)
 
#define SKEIN_MODIFIER_WORDS   ( 2) /* number of modifier (tweak) words */
 
#define SKEIN_256_STATE_WORDS   ( 4)
 
#define SKEIN_512_STATE_WORDS   ( 8)
 
#define SKEIN1024_STATE_WORDS   (16)
 
#define SKEIN_MAX_STATE_WORDS   (16)
 
#define SKEIN_256_STATE_BYTES   ( 8*SKEIN_256_STATE_WORDS)
 
#define SKEIN_512_STATE_BYTES   ( 8*SKEIN_512_STATE_WORDS)
 
#define SKEIN1024_STATE_BYTES   ( 8*SKEIN1024_STATE_WORDS)
 
#define SKEIN_256_STATE_BITS   (64*SKEIN_256_STATE_WORDS)
 
#define SKEIN_512_STATE_BITS   (64*SKEIN_512_STATE_WORDS)
 
#define SKEIN1024_STATE_BITS   (64*SKEIN1024_STATE_WORDS)
 
#define SKEIN_256_BLOCK_BYTES   ( 8*SKEIN_256_STATE_WORDS)
 
#define SKEIN_512_BLOCK_BYTES   ( 8*SKEIN_512_STATE_WORDS)
 
#define SKEIN1024_BLOCK_BYTES   ( 8*SKEIN1024_STATE_WORDS)
 
#define SKEIN_RND_SPECIAL   (1000u)
 
#define SKEIN_RND_KEY_INITIAL   (SKEIN_RND_SPECIAL+0u)
 
#define SKEIN_RND_KEY_INJECT   (SKEIN_RND_SPECIAL+1u)
 
#define SKEIN_RND_FEED_FWD   (SKEIN_RND_SPECIAL+2u)
 
#define SKEIN_TREE_HASH   (1)
 
#define SKEIN_T1_BIT(BIT)   ((BIT) - 64) /* offset 64 because it's the second word */
 
#define SKEIN_T1_POS_TREE_LVL   SKEIN_T1_BIT(112) /* bits 112..118: level in hash tree */
 
#define SKEIN_T1_POS_BIT_PAD   SKEIN_T1_BIT(119) /* bit 119 : partial final input byte */
 
#define SKEIN_T1_POS_BLK_TYPE   SKEIN_T1_BIT(120) /* bits 120..125: type field */
 
#define SKEIN_T1_POS_FIRST   SKEIN_T1_BIT(126) /* bits 126 : first block flag */
 
#define SKEIN_T1_POS_FINAL   SKEIN_T1_BIT(127) /* bit 127 : final block flag */
 
#define SKEIN_T1_FLAG_FIRST   (((u64b_t) 1 ) << SKEIN_T1_POS_FIRST)
 
#define SKEIN_T1_FLAG_FINAL   (((u64b_t) 1 ) << SKEIN_T1_POS_FINAL)
 
#define SKEIN_T1_FLAG_BIT_PAD   (((u64b_t) 1 ) << SKEIN_T1_POS_BIT_PAD)
 
#define SKEIN_T1_TREE_LVL_MASK   (((u64b_t)0x7F) << SKEIN_T1_POS_TREE_LVL)
 
#define SKEIN_T1_TREE_LEVEL(n)   (((u64b_t) (n)) << SKEIN_T1_POS_TREE_LVL)
 
#define SKEIN_BLK_TYPE_KEY   ( 0) /* key, for MAC and KDF */
 
#define SKEIN_BLK_TYPE_CFG   ( 4) /* configuration block */
 
#define SKEIN_BLK_TYPE_PERS   ( 8) /* personalization string */
 
#define SKEIN_BLK_TYPE_PK   (12) /* public key (for digital signature hashing) */
 
#define SKEIN_BLK_TYPE_KDF   (16) /* key identifier for KDF */
 
#define SKEIN_BLK_TYPE_NONCE   (20) /* nonce for PRNG */
 
#define SKEIN_BLK_TYPE_MSG   (48) /* message processing */
 
#define SKEIN_BLK_TYPE_OUT   (63) /* output stage */
 
#define SKEIN_BLK_TYPE_MASK   (63) /* bit field mask */
 
#define SKEIN_T1_BLK_TYPE(T)   (((u64b_t) (SKEIN_BLK_TYPE_##T)) << SKEIN_T1_POS_BLK_TYPE)
 
#define SKEIN_T1_BLK_TYPE_KEY   SKEIN_T1_BLK_TYPE(KEY) /* key, for MAC and KDF */
 
#define SKEIN_T1_BLK_TYPE_CFG   SKEIN_T1_BLK_TYPE(CFG) /* configuration block */
 
#define SKEIN_T1_BLK_TYPE_PERS   SKEIN_T1_BLK_TYPE(PERS) /* personalization string */
 
#define SKEIN_T1_BLK_TYPE_PK   SKEIN_T1_BLK_TYPE(PK) /* public key (for digital signature hashing) */
 
#define SKEIN_T1_BLK_TYPE_KDF   SKEIN_T1_BLK_TYPE(KDF) /* key identifier for KDF */
 
#define SKEIN_T1_BLK_TYPE_NONCE   SKEIN_T1_BLK_TYPE(NONCE)/* nonce for PRNG */
 
#define SKEIN_T1_BLK_TYPE_MSG   SKEIN_T1_BLK_TYPE(MSG) /* message processing */
 
#define SKEIN_T1_BLK_TYPE_OUT   SKEIN_T1_BLK_TYPE(OUT) /* output stage */
 
#define SKEIN_T1_BLK_TYPE_MASK   SKEIN_T1_BLK_TYPE(MASK) /* field bit mask */
 
#define SKEIN_T1_BLK_TYPE_CFG_FINAL   (SKEIN_T1_BLK_TYPE_CFG | SKEIN_T1_FLAG_FINAL)
 
#define SKEIN_T1_BLK_TYPE_OUT_FINAL   (SKEIN_T1_BLK_TYPE_OUT | SKEIN_T1_FLAG_FINAL)
 
#define SKEIN_VERSION   (1)
 
#define SKEIN_ID_STRING_LE   (0x33414853) /* "SHA3" (little-endian)*/
 
#define SKEIN_MK_64(hi32, lo32)   ((lo32) + (((u64b_t) (hi32)) << 32))
 
#define SKEIN_SCHEMA_VER   SKEIN_MK_64(SKEIN_VERSION,SKEIN_ID_STRING_LE)
 
#define SKEIN_KS_PARITY   SKEIN_MK_64(0x1BD11BDA,0xA9FC1A22)
 
#define SKEIN_CFG_STR_LEN   (4*8)
 
#define SKEIN_CFG_TREE_LEAF_SIZE_POS   ( 0)
 
#define SKEIN_CFG_TREE_NODE_SIZE_POS   ( 8)
 
#define SKEIN_CFG_TREE_MAX_LEVEL_POS   (16)
 
#define SKEIN_CFG_TREE_LEAF_SIZE_MSK   (((u64b_t) 0xFF) << SKEIN_CFG_TREE_LEAF_SIZE_POS)
 
#define SKEIN_CFG_TREE_NODE_SIZE_MSK   (((u64b_t) 0xFF) << SKEIN_CFG_TREE_NODE_SIZE_POS)
 
#define SKEIN_CFG_TREE_MAX_LEVEL_MSK   (((u64b_t) 0xFF) << SKEIN_CFG_TREE_MAX_LEVEL_POS)
 
#define SKEIN_CFG_TREE_INFO(leaf, node, maxLvl)
 
#define SKEIN_CFG_TREE_INFO_SEQUENTIAL   SKEIN_CFG_TREE_INFO(0,0,0) /* use as treeInfo in InitExt() call for sequential processing */
 
#define Skein_Get_Tweak(ctxPtr, TWK_NUM)   ((ctxPtr)->h.T[TWK_NUM])
 
#define Skein_Set_Tweak(ctxPtr, TWK_NUM, tVal)   {(ctxPtr)->h.T[TWK_NUM] = (tVal);}
 
#define Skein_Get_T0(ctxPtr)   Skein_Get_Tweak(ctxPtr,0)
 
#define Skein_Get_T1(ctxPtr)   Skein_Get_Tweak(ctxPtr,1)
 
#define Skein_Set_T0(ctxPtr, T0)   Skein_Set_Tweak(ctxPtr,0,T0)
 
#define Skein_Set_T1(ctxPtr, T1)   Skein_Set_Tweak(ctxPtr,1,T1)
 
#define Skein_Set_T0_T1(ctxPtr, T0, T1)
 
#define Skein_Set_Type(ctxPtr, BLK_TYPE)    Skein_Set_T1(ctxPtr,SKEIN_T1_BLK_TYPE_##BLK_TYPE)
 
#define Skein_Start_New_Type(ctxPtr, BLK_TYPE)   { Skein_Set_T0_T1(ctxPtr,0,SKEIN_T1_FLAG_FIRST | SKEIN_T1_BLK_TYPE_##BLK_TYPE); (ctxPtr)->h.bCnt=0; }
 
#define Skein_Clear_First_Flag(hdr)   { (hdr).T[1] &= ~SKEIN_T1_FLAG_FIRST; }
 
#define Skein_Set_Bit_Pad_Flag(hdr)   { (hdr).T[1] |= SKEIN_T1_FLAG_BIT_PAD; }
 
#define Skein_Set_Tree_Level(hdr, height)   { (hdr).T[1] |= SKEIN_T1_TREE_LEVEL(height);}
 
#define Skein_Show_Block(bits, ctx, X, blkPtr, wPtr, ksEvenPtr, ksOddPtr)
 
#define Skein_Show_Round(bits, ctx, r, X)
 
#define Skein_Show_R_Ptr(bits, ctx, r, X_ptr)
 
#define Skein_Show_Final(bits, ctx, cnt, outPtr)
 
#define Skein_Show_Key(bits, ctx, key, keyBytes)
 
#define Skein_Assert(x, retCode)   /* default: ignore all Asserts, for performance */
 
#define Skein_assert(x)
 
#define SKEIN_256_ROUNDS_TOTAL   (72) /* number of rounds for the different block sizes */
 
#define SKEIN_512_ROUNDS_TOTAL   (72)
 
#define SKEIN1024_ROUNDS_TOTAL   (80)
 
#define MK_64   SKEIN_MK_64
 
#define SKEIN_USE_ASM   (0) /* default is all C code (no ASM) */
 
#define SKEIN_LOOP   001 /* default: unroll 256 and 512, but not 1024 */
 
#define BLK_BITS   (WCNT*64) /* some useful definitions for code here */
 
#define KW_TWK_BASE   (0)
 
#define KW_KEY_BASE   (3)
 
#define ks   (kw + KW_KEY_BASE)
 
#define ts   (kw + KW_TWK_BASE)
 
#define DebugSaveTweak(ctx)
 
#define RCNT   (SKEIN_256_ROUNDS_TOTAL/8)
 
#define SKEIN_UNROLL_256   (((SKEIN_LOOP)/100)%10)
 
#define Round256(p0, p1, p2, p3, ROT, rNum)
 
#define R256(p0, p1, p2, p3, ROT, rNum)
 
#define I256(R)
 
#define R256_8_rounds(R)
 
#define R256_Unroll_R(NN)   ((SKEIN_UNROLL_256 == 0 && SKEIN_256_ROUNDS_TOTAL/8 > (NN)) || (SKEIN_UNROLL_256 > (NN)))
 
#define RCNT   (SKEIN_512_ROUNDS_TOTAL/8)
 
#define SKEIN_UNROLL_512   (((SKEIN_LOOP)/10)%10)
 
#define Round512(p0, p1, p2, p3, p4, p5, p6, p7, ROT, rNum)
 
#define R512(p0, p1, p2, p3, p4, p5, p6, p7, ROT, rNum)
 
#define I512(R)
 
#define R512_8_rounds(R)
 
#define R512_Unroll_R(NN)   ((SKEIN_UNROLL_512 == 0 && SKEIN_512_ROUNDS_TOTAL/8 > (NN)) || (SKEIN_UNROLL_512 > (NN)))
 
#define RCNT   (SKEIN1024_ROUNDS_TOTAL/8)
 
#define SKEIN_UNROLL_1024   ((SKEIN_LOOP)%10)
 
#define Round1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, pE, pF, ROT, rNum)
 
#define R1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, pE, pF, ROT, rn)
 
#define I1024(R)
 
#define R1024_8_rounds(R)
 
#define R1024_Unroll_R(NN)   ((SKEIN_UNROLL_1024 == 0 && SKEIN1024_ROUNDS_TOTAL/8 > (NN)) || (SKEIN_UNROLL_1024 > (NN)))
 

Enumerations

enum  {
  R_256_0_0 =14 , R_256_0_1 =16 , R_256_1_0 =52 , R_256_1_1 =57 ,
  R_256_2_0 =23 , R_256_2_1 =40 , R_256_3_0 = 5 , R_256_3_1 =37 ,
  R_256_4_0 =25 , R_256_4_1 =33 , R_256_5_0 =46 , R_256_5_1 =12 ,
  R_256_6_0 =58 , R_256_6_1 =22 , R_256_7_0 =32 , R_256_7_1 =32 ,
  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 ,
  R_512_5_0 =13 , R_512_5_1 =50 , R_512_5_2 =10 , R_512_5_3 =17 ,
  R_512_6_0 =25 , R_512_6_1 =29 , R_512_6_2 =39 , R_512_6_3 =43 ,
  R_512_7_0 = 8 , R_512_7_1 =35 , R_512_7_2 =56 , R_512_7_3 =22 ,
  R1024_0_0 =24 , R1024_0_1 =13 , R1024_0_2 = 8 , R1024_0_3 =47 ,
  R1024_0_4 = 8 , R1024_0_5 =17 , R1024_0_6 =22 , R1024_0_7 =37 ,
  R1024_1_0 =38 , R1024_1_1 =19 , R1024_1_2 =10 , R1024_1_3 =55 ,
  R1024_1_4 =49 , R1024_1_5 =18 , R1024_1_6 =23 , R1024_1_7 =52 ,
  R1024_2_0 =33 , R1024_2_1 = 4 , R1024_2_2 =51 , R1024_2_3 =13 ,
  R1024_2_4 =34 , R1024_2_5 =41 , R1024_2_6 =59 , R1024_2_7 =17 ,
  R1024_3_0 = 5 , R1024_3_1 =20 , R1024_3_2 =48 , R1024_3_3 =41 ,
  R1024_3_4 =47 , R1024_3_5 =28 , R1024_3_6 =16 , R1024_3_7 =25 ,
  R1024_4_0 =41 , R1024_4_1 = 9 , R1024_4_2 =37 , R1024_4_3 =31 ,
  R1024_4_4 =12 , R1024_4_5 =47 , R1024_4_6 =44 , R1024_4_7 =30 ,
  R1024_5_0 =16 , R1024_5_1 =34 , R1024_5_2 =56 , R1024_5_3 =51 ,
  R1024_5_4 = 4 , R1024_5_5 =53 , R1024_5_6 =42 , R1024_5_7 =41 ,
  R1024_6_0 =31 , R1024_6_1 =44 , R1024_6_2 =47 , R1024_6_3 =46 ,
  R1024_6_4 =19 , R1024_6_5 =42 , R1024_6_6 =44 , R1024_6_7 =25 ,
  R1024_7_0 = 9 , R1024_7_1 =48 , R1024_7_2 =35 , R1024_7_3 =52 ,
  R1024_7_4 =23 , R1024_7_5 =31 , R1024_7_6 =37 , R1024_7_7 =20
}
 

Functions

static int Skein_512_Init (Skein_512_Ctxt_t *ctx, size_t hashBitLen)
 
static int Skein1024_Init (Skein1024_Ctxt_t *ctx, size_t hashBitLen)
 
static int Skein_256_Update (Skein_256_Ctxt_t *ctx, const u08b_t *msg, size_t msgByteCnt)
 
static int Skein_512_Update (Skein_512_Ctxt_t *ctx, const u08b_t *msg, size_t msgByteCnt)
 
static int Skein1024_Update (Skein1024_Ctxt_t *ctx, const u08b_t *msg, size_t msgByteCnt)
 
static int Skein_256_Final (Skein_256_Ctxt_t *ctx, u08b_t *hashVal)
 
static int Skein_512_Final (Skein_512_Ctxt_t *ctx, u08b_t *hashVal)
 
static int Skein1024_Final (Skein1024_Ctxt_t *ctx, u08b_t *hashVal)
 
static void Skein_256_Process_Block (Skein_256_Ctxt_t *ctx, const u08b_t *blkPtr, size_t blkCnt, size_t byteCntAdd)
 
static void Skein_512_Process_Block (Skein_512_Ctxt_t *ctx, const u08b_t *blkPtr, size_t blkCnt, size_t byteCntAdd)
 
static void Skein1024_Process_Block (Skein1024_Ctxt_t *ctx, const u08b_t *blkPtr, size_t blkCnt, size_t byteCntAdd)
 
static HashReturn Init (hashState *state, int hashbitlen)
 
static HashReturn Update (hashState *state, const BitSequence *data, DataLength databitlen)
 
static HashReturn Final (hashState *state, BitSequence *hashval)
 
HashReturn skein_hash (int hashbitlen, const BitSequence *data, DataLength databitlen, BitSequence *hashval)
 

Variables

const u64b_t SKEIN_256_IV_128 []
 
const u64b_t SKEIN_256_IV_160 []
 
const u64b_t SKEIN_256_IV_224 []
 
const u64b_t SKEIN_256_IV_256 []
 
const u64b_t SKEIN_512_IV_128 []
 
const u64b_t SKEIN_512_IV_160 []
 
const u64b_t SKEIN_512_IV_224 []
 
const u64b_t SKEIN_512_IV_256 []
 
const u64b_t SKEIN_512_IV_384 []
 
const u64b_t SKEIN_512_IV_512 []
 
const u64b_t SKEIN1024_IV_384 []
 
const u64b_t SKEIN1024_IV_512 []
 
const u64b_t SKEIN1024_IV_1024 []
 

Macro Definition Documentation

◆ BLK_BITS

#define BLK_BITS   (WCNT*64) /* some useful definitions for code here */

◆ DebugSaveTweak

#define DebugSaveTweak (   ctx)

◆ DISABLE_UNUSED

#define DISABLE_UNUSED   0

◆ I1024

#define I1024 (   R)
Value:
X00 += ks[r+(R)+ 0]; /* inject the key schedule value */ \
X01 += ks[r+(R)+ 1]; \
X02 += ks[r+(R)+ 2]; \
X03 += ks[r+(R)+ 3]; \
X04 += ks[r+(R)+ 4]; \
X05 += ks[r+(R)+ 5]; \
X06 += ks[r+(R)+ 6]; \
X07 += ks[r+(R)+ 7]; \
X08 += ks[r+(R)+ 8]; \
X09 += ks[r+(R)+ 9]; \
X10 += ks[r+(R)+10]; \
X11 += ks[r+(R)+11]; \
X12 += ks[r+(R)+12]; \
X13 += ks[r+(R)+13] + ts[r+(R)+0]; \
X14 += ks[r+(R)+14] + ts[r+(R)+1]; \
X15 += ks[r+(R)+15] + r+(R) ; \
ks[r + (R)+16] = ks[r+(R)-1]; /* rotate key schedule */ \
ts[r + (R)+ 2] = ts[r+(R)-1]; \
Skein_Show_R_Ptr(BLK_BITS,&ctx->h,SKEIN_RND_KEY_INJECT,Xptr);
#define ks
Definition: skein.c:521
#define BLK_BITS
Definition: skein.c:518
#define SKEIN_RND_KEY_INJECT
Definition: skein.c:48
#define ts
Definition: skein.c:522

◆ I256

#define I256 (   R)
Value:
X0 += ks[((R)+1) % 5]; /* inject the key schedule value */ \
X1 += ks[((R)+2) % 5] + ts[((R)+1) % 3]; \
X2 += ks[((R)+3) % 5] + ts[((R)+2) % 3]; \
X3 += ks[((R)+4) % 5] + (R)+1; \
Skein_Show_R_Ptr(BLK_BITS,&ctx->h,SKEIN_RND_KEY_INJECT,Xptr);

◆ I512

#define I512 (   R)
Value:
X0 += ks[((R)+1) % 9]; /* inject the key schedule value */ \
X1 += ks[((R)+2) % 9]; \
X2 += ks[((R)+3) % 9]; \
X3 += ks[((R)+4) % 9]; \
X4 += ks[((R)+5) % 9]; \
X5 += ks[((R)+6) % 9] + ts[((R)+1) % 3]; \
X6 += ks[((R)+7) % 9] + ts[((R)+2) % 3]; \
X7 += ks[((R)+8) % 9] + (R)+1; \
Skein_Show_R_Ptr(BLK_BITS,&ctx->h,SKEIN_RND_KEY_INJECT,Xptr);

◆ ks

#define ks   (kw + KW_KEY_BASE)

◆ KW_KEY_BASE

#define KW_KEY_BASE   (3)

◆ KW_TWK_BASE

#define KW_TWK_BASE   (0)

◆ MK_64

#define MK_64   SKEIN_MK_64

◆ R1024

#define R1024 (   p0,
  p1,
  p2,
  p3,
  p4,
  p5,
  p6,
  p7,
  p8,
  p9,
  pA,
  pB,
  pC,
  pD,
  pE,
  pF,
  ROT,
  rn 
)
Value:
Round1024(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,pA,pB,pC,pD,pE,pF,ROT,rn) \
Skein_Show_R_Ptr(BLK_BITS,&ctx->h,4*(r-1)+rn,Xptr);
#define ROT(x, n)
#define Round1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, pE, pF, ROT, rNum)

◆ R1024_8_rounds

#define R1024_8_rounds (   R)
Value:
/* do 8 full rounds */ \
R1024(00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,R1024_0,8*(R) + 1); \
R1024(00,09,02,13,06,11,04,15,10,07,12,03,14,05,08,01,R1024_1,8*(R) + 2); \
R1024(00,07,02,05,04,03,06,01,12,15,14,13,08,11,10,09,R1024_2,8*(R) + 3); \
R1024(00,15,02,11,06,13,04,09,14,01,08,05,10,03,12,07,R1024_3,8*(R) + 4); \
I1024(2*(R)); \
R1024(00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,R1024_4,8*(R) + 5); \
R1024(00,09,02,13,06,11,04,15,10,07,12,03,14,05,08,01,R1024_5,8*(R) + 6); \
R1024(00,07,02,05,04,03,06,01,12,15,14,13,08,11,10,09,R1024_6,8*(R) + 7); \
R1024(00,15,02,11,06,13,04,09,14,01,08,05,10,03,12,07,R1024_7,8*(R) + 8); \
I1024(2*(R)+1);

◆ R1024_Unroll_R

#define R1024_Unroll_R (   NN)    ((SKEIN_UNROLL_1024 == 0 && SKEIN1024_ROUNDS_TOTAL/8 > (NN)) || (SKEIN_UNROLL_1024 > (NN)))

◆ R256

#define R256 (   p0,
  p1,
  p2,
  p3,
  ROT,
  rNum 
)
Value:
/* fully unrolled */ \
Round256(p0,p1,p2,p3,ROT,rNum) \
Skein_Show_R_Ptr(BLK_BITS,&ctx->h,rNum,Xptr);

◆ R256_8_rounds

#define R256_8_rounds (   R)
Value:
R256(0,1,2,3,R_256_0,8*(R) + 1); \
R256(0,3,2,1,R_256_1,8*(R) + 2); \
R256(0,1,2,3,R_256_2,8*(R) + 3); \
R256(0,3,2,1,R_256_3,8*(R) + 4); \
I256(2*(R)); \
R256(0,1,2,3,R_256_4,8*(R) + 5); \
R256(0,3,2,1,R_256_5,8*(R) + 6); \
R256(0,1,2,3,R_256_6,8*(R) + 7); \
R256(0,3,2,1,R_256_7,8*(R) + 8); \
I256(2*(R)+1);
#define R256(p0, p1, p2, p3, ROT, rNum)

◆ R256_Unroll_R

#define R256_Unroll_R (   NN)    ((SKEIN_UNROLL_256 == 0 && SKEIN_256_ROUNDS_TOTAL/8 > (NN)) || (SKEIN_UNROLL_256 > (NN)))

◆ R512

#define R512 (   p0,
  p1,
  p2,
  p3,
  p4,
  p5,
  p6,
  p7,
  ROT,
  rNum 
)
Value:
/* unrolled */ \
Round512(p0,p1,p2,p3,p4,p5,p6,p7,ROT,rNum) \
Skein_Show_R_Ptr(BLK_BITS,&ctx->h,rNum,Xptr);

◆ R512_8_rounds

#define R512_8_rounds (   R)
Value:
/* do 8 full rounds */ \
R512(0,1,2,3,4,5,6,7,R_512_0,8*(R)+ 1); \
R512(2,1,4,7,6,5,0,3,R_512_1,8*(R)+ 2); \
R512(4,1,6,3,0,5,2,7,R_512_2,8*(R)+ 3); \
R512(6,1,0,7,2,5,4,3,R_512_3,8*(R)+ 4); \
I512(2*(R)); \
R512(0,1,2,3,4,5,6,7,R_512_4,8*(R)+ 5); \
R512(2,1,4,7,6,5,0,3,R_512_5,8*(R)+ 6); \
R512(4,1,6,3,0,5,2,7,R_512_6,8*(R)+ 7); \
R512(6,1,0,7,2,5,4,3,R_512_7,8*(R)+ 8); \
I512(2*(R)+1); /* and key injection */

◆ R512_Unroll_R

#define R512_Unroll_R (   NN)    ((SKEIN_UNROLL_512 == 0 && SKEIN_512_ROUNDS_TOTAL/8 > (NN)) || (SKEIN_UNROLL_512 > (NN)))

◆ RCNT [1/3]

#define RCNT   (SKEIN_256_ROUNDS_TOTAL/8)

◆ RCNT [2/3]

#define RCNT   (SKEIN_512_ROUNDS_TOTAL/8)

◆ RCNT [3/3]

#define RCNT   (SKEIN1024_ROUNDS_TOTAL/8)

◆ Round1024

#define Round1024 (   p0,
  p1,
  p2,
  p3,
  p4,
  p5,
  p6,
  p7,
  p8,
  p9,
  pA,
  pB,
  pC,
  pD,
  pE,
  pF,
  ROT,
  rNum 
)
Value:
X##p0 += X##p1; X##p1 = RotL_64(X##p1,ROT##_0); X##p1 ^= X##p0; \
X##p2 += X##p3; X##p3 = RotL_64(X##p3,ROT##_1); X##p3 ^= X##p2; \
X##p4 += X##p5; X##p5 = RotL_64(X##p5,ROT##_2); X##p5 ^= X##p4; \
X##p6 += X##p7; X##p7 = RotL_64(X##p7,ROT##_3); X##p7 ^= X##p6; \
X##p8 += X##p9; X##p9 = RotL_64(X##p9,ROT##_4); X##p9 ^= X##p8; \
X##pA += X##pB; X##pB = RotL_64(X##pB,ROT##_5); X##pB ^= X##pA; \
X##pC += X##pD; X##pD = RotL_64(X##pD,ROT##_6); X##pD ^= X##pC; \
X##pE += X##pF; X##pF = RotL_64(X##pF,ROT##_7); X##pF ^= X##pE; \
#define RotL_64(x, N)
Definition: skein_port.h:93

◆ Round256

#define Round256 (   p0,
  p1,
  p2,
  p3,
  ROT,
  rNum 
)
Value:
X##p0 += X##p1; X##p1 = RotL_64(X##p1,ROT##_0); X##p1 ^= X##p0; \
X##p2 += X##p3; X##p3 = RotL_64(X##p3,ROT##_1); X##p3 ^= X##p2; \

◆ Round512

#define Round512 (   p0,
  p1,
  p2,
  p3,
  p4,
  p5,
  p6,
  p7,
  ROT,
  rNum 
)
Value:
X##p0 += X##p1; X##p1 = RotL_64(X##p1,ROT##_0); X##p1 ^= X##p0; \
X##p2 += X##p3; X##p3 = RotL_64(X##p3,ROT##_1); X##p3 ^= X##p2; \
X##p4 += X##p5; X##p5 = RotL_64(X##p5,ROT##_2); X##p5 ^= X##p4; \
X##p6 += X##p7; X##p7 = RotL_64(X##p7,ROT##_3); X##p7 ^= X##p6; \

◆ SKEIN1024_BLOCK_BYTES

#define SKEIN1024_BLOCK_BYTES   ( 8*SKEIN1024_STATE_WORDS)

◆ SKEIN1024_ROUNDS_TOTAL

#define SKEIN1024_ROUNDS_TOTAL   (80)

◆ SKEIN1024_STATE_BITS

#define SKEIN1024_STATE_BITS   (64*SKEIN1024_STATE_WORDS)

◆ SKEIN1024_STATE_BYTES

#define SKEIN1024_STATE_BYTES   ( 8*SKEIN1024_STATE_WORDS)

◆ SKEIN1024_STATE_WORDS

#define SKEIN1024_STATE_WORDS   (16)

◆ SKEIN_256_BLOCK_BYTES

#define SKEIN_256_BLOCK_BYTES   ( 8*SKEIN_256_STATE_WORDS)

◆ SKEIN_256_NIST_MAX_HASHBITS

#define SKEIN_256_NIST_MAX_HASHBITS   (0)

◆ SKEIN_256_ROUNDS_TOTAL

#define SKEIN_256_ROUNDS_TOTAL   (72) /* number of rounds for the different block sizes */

◆ SKEIN_256_STATE_BITS

#define SKEIN_256_STATE_BITS   (64*SKEIN_256_STATE_WORDS)

◆ SKEIN_256_STATE_BYTES

#define SKEIN_256_STATE_BYTES   ( 8*SKEIN_256_STATE_WORDS)

◆ SKEIN_256_STATE_WORDS

#define SKEIN_256_STATE_WORDS   ( 4)

◆ SKEIN_512_BLOCK_BYTES

#define SKEIN_512_BLOCK_BYTES   ( 8*SKEIN_512_STATE_WORDS)

◆ SKEIN_512_NIST_MAX_HASHBITS

#define SKEIN_512_NIST_MAX_HASHBITS   (512)

◆ SKEIN_512_ROUNDS_TOTAL

#define SKEIN_512_ROUNDS_TOTAL   (72)

◆ SKEIN_512_STATE_BITS

#define SKEIN_512_STATE_BITS   (64*SKEIN_512_STATE_WORDS)

◆ SKEIN_512_STATE_BYTES

#define SKEIN_512_STATE_BYTES   ( 8*SKEIN_512_STATE_WORDS)

◆ SKEIN_512_STATE_WORDS

#define SKEIN_512_STATE_WORDS   ( 8)

◆ Skein_assert

#define Skein_assert (   x)

◆ Skein_Assert

#define Skein_Assert (   x,
  retCode 
)    /* default: ignore all Asserts, for performance */

◆ SKEIN_BLK_TYPE_CFG

#define SKEIN_BLK_TYPE_CFG   ( 4) /* configuration block */

◆ SKEIN_BLK_TYPE_KDF

#define SKEIN_BLK_TYPE_KDF   (16) /* key identifier for KDF */

◆ SKEIN_BLK_TYPE_KEY

#define SKEIN_BLK_TYPE_KEY   ( 0) /* key, for MAC and KDF */

◆ SKEIN_BLK_TYPE_MASK

#define SKEIN_BLK_TYPE_MASK   (63) /* bit field mask */

◆ SKEIN_BLK_TYPE_MSG

#define SKEIN_BLK_TYPE_MSG   (48) /* message processing */

◆ SKEIN_BLK_TYPE_NONCE

#define SKEIN_BLK_TYPE_NONCE   (20) /* nonce for PRNG */

◆ SKEIN_BLK_TYPE_OUT

#define SKEIN_BLK_TYPE_OUT   (63) /* output stage */

◆ SKEIN_BLK_TYPE_PERS

#define SKEIN_BLK_TYPE_PERS   ( 8) /* personalization string */

◆ SKEIN_BLK_TYPE_PK

#define SKEIN_BLK_TYPE_PK   (12) /* public key (for digital signature hashing) */

◆ SKEIN_CFG_STR_LEN

#define SKEIN_CFG_STR_LEN   (4*8)

◆ SKEIN_CFG_TREE_INFO

#define SKEIN_CFG_TREE_INFO (   leaf,
  node,
  maxLvl 
)
Value:
( (((u64b_t)(leaf )) << SKEIN_CFG_TREE_LEAF_SIZE_POS) | \
#define SKEIN_CFG_TREE_LEAF_SIZE_POS
Definition: skein.c:200
#define SKEIN_CFG_TREE_MAX_LEVEL_POS
Definition: skein.c:202
#define SKEIN_CFG_TREE_NODE_SIZE_POS
Definition: skein.c:201
uint64_t u64b_t
Definition: skein_port.h:90

◆ SKEIN_CFG_TREE_INFO_SEQUENTIAL

#define SKEIN_CFG_TREE_INFO_SEQUENTIAL   SKEIN_CFG_TREE_INFO(0,0,0) /* use as treeInfo in InitExt() call for sequential processing */

◆ SKEIN_CFG_TREE_LEAF_SIZE_MSK

#define SKEIN_CFG_TREE_LEAF_SIZE_MSK   (((u64b_t) 0xFF) << SKEIN_CFG_TREE_LEAF_SIZE_POS)

◆ SKEIN_CFG_TREE_LEAF_SIZE_POS

#define SKEIN_CFG_TREE_LEAF_SIZE_POS   ( 0)

◆ SKEIN_CFG_TREE_MAX_LEVEL_MSK

#define SKEIN_CFG_TREE_MAX_LEVEL_MSK   (((u64b_t) 0xFF) << SKEIN_CFG_TREE_MAX_LEVEL_POS)

◆ SKEIN_CFG_TREE_MAX_LEVEL_POS

#define SKEIN_CFG_TREE_MAX_LEVEL_POS   (16)

◆ SKEIN_CFG_TREE_NODE_SIZE_MSK

#define SKEIN_CFG_TREE_NODE_SIZE_MSK   (((u64b_t) 0xFF) << SKEIN_CFG_TREE_NODE_SIZE_POS)

◆ SKEIN_CFG_TREE_NODE_SIZE_POS

#define SKEIN_CFG_TREE_NODE_SIZE_POS   ( 8)

◆ Skein_Clear_First_Flag

#define Skein_Clear_First_Flag (   hdr)    { (hdr).T[1] &= ~SKEIN_T1_FLAG_FIRST; }

◆ Skein_Get_T0

#define Skein_Get_T0 (   ctxPtr)    Skein_Get_Tweak(ctxPtr,0)

◆ Skein_Get_T1

#define Skein_Get_T1 (   ctxPtr)    Skein_Get_Tweak(ctxPtr,1)

◆ Skein_Get_Tweak

#define Skein_Get_Tweak (   ctxPtr,
  TWK_NUM 
)    ((ctxPtr)->h.T[TWK_NUM])

◆ SKEIN_ID_STRING_LE

#define SKEIN_ID_STRING_LE   (0x33414853) /* "SHA3" (little-endian)*/

◆ SKEIN_KS_PARITY

#define SKEIN_KS_PARITY   SKEIN_MK_64(0x1BD11BDA,0xA9FC1A22)

◆ SKEIN_LOOP

#define SKEIN_LOOP   001 /* default: unroll 256 and 512, but not 1024 */

◆ SKEIN_MAX_STATE_WORDS

#define SKEIN_MAX_STATE_WORDS   (16)

◆ SKEIN_MK_64

#define SKEIN_MK_64 (   hi32,
  lo32 
)    ((lo32) + (((u64b_t) (hi32)) << 32))

◆ SKEIN_MODIFIER_WORDS

#define SKEIN_MODIFIER_WORDS   ( 2) /* number of modifier (tweak) words */

◆ SKEIN_PORT_CODE

#define SKEIN_PORT_CODE   /* instantiate any code in skein_port.h */

◆ SKEIN_RND_FEED_FWD

#define SKEIN_RND_FEED_FWD   (SKEIN_RND_SPECIAL+2u)

◆ SKEIN_RND_KEY_INITIAL

#define SKEIN_RND_KEY_INITIAL   (SKEIN_RND_SPECIAL+0u)

◆ SKEIN_RND_KEY_INJECT

#define SKEIN_RND_KEY_INJECT   (SKEIN_RND_SPECIAL+1u)

◆ SKEIN_RND_SPECIAL

#define SKEIN_RND_SPECIAL   (1000u)

◆ SKEIN_SCHEMA_VER

#define SKEIN_SCHEMA_VER   SKEIN_MK_64(SKEIN_VERSION,SKEIN_ID_STRING_LE)

◆ Skein_Set_Bit_Pad_Flag

#define Skein_Set_Bit_Pad_Flag (   hdr)    { (hdr).T[1] |= SKEIN_T1_FLAG_BIT_PAD; }

◆ Skein_Set_T0

#define Skein_Set_T0 (   ctxPtr,
  T0 
)    Skein_Set_Tweak(ctxPtr,0,T0)

◆ Skein_Set_T0_T1

#define Skein_Set_T0_T1 (   ctxPtr,
  T0,
  T1 
)
Value:
{ \
Skein_Set_T0(ctxPtr,(T0)); \
Skein_Set_T1(ctxPtr,(T1)); \
}

◆ Skein_Set_T1

#define Skein_Set_T1 (   ctxPtr,
  T1 
)    Skein_Set_Tweak(ctxPtr,1,T1)

◆ Skein_Set_Tree_Level

#define Skein_Set_Tree_Level (   hdr,
  height 
)    { (hdr).T[1] |= SKEIN_T1_TREE_LEVEL(height);}

◆ Skein_Set_Tweak

#define Skein_Set_Tweak (   ctxPtr,
  TWK_NUM,
  tVal 
)    {(ctxPtr)->h.T[TWK_NUM] = (tVal);}

◆ Skein_Set_Type

#define Skein_Set_Type (   ctxPtr,
  BLK_TYPE 
)     Skein_Set_T1(ctxPtr,SKEIN_T1_BLK_TYPE_##BLK_TYPE)

◆ Skein_Show_Block

#define Skein_Show_Block (   bits,
  ctx,
  X,
  blkPtr,
  wPtr,
  ksEvenPtr,
  ksOddPtr 
)

◆ Skein_Show_Final

#define Skein_Show_Final (   bits,
  ctx,
  cnt,
  outPtr 
)

◆ Skein_Show_Key

#define Skein_Show_Key (   bits,
  ctx,
  key,
  keyBytes 
)

◆ Skein_Show_R_Ptr

#define Skein_Show_R_Ptr (   bits,
  ctx,
  r,
  X_ptr 
)

◆ Skein_Show_Round

#define Skein_Show_Round (   bits,
  ctx,
  r,
 
)

◆ Skein_Start_New_Type

#define Skein_Start_New_Type (   ctxPtr,
  BLK_TYPE 
)    { Skein_Set_T0_T1(ctxPtr,0,SKEIN_T1_FLAG_FIRST | SKEIN_T1_BLK_TYPE_##BLK_TYPE); (ctxPtr)->h.bCnt=0; }

◆ SKEIN_T1_BIT

#define SKEIN_T1_BIT (   BIT)    ((BIT) - 64) /* offset 64 because it's the second word */

◆ SKEIN_T1_BLK_TYPE

#define SKEIN_T1_BLK_TYPE (   T)    (((u64b_t) (SKEIN_BLK_TYPE_##T)) << SKEIN_T1_POS_BLK_TYPE)

◆ SKEIN_T1_BLK_TYPE_CFG

#define SKEIN_T1_BLK_TYPE_CFG   SKEIN_T1_BLK_TYPE(CFG) /* configuration block */

◆ SKEIN_T1_BLK_TYPE_CFG_FINAL

#define SKEIN_T1_BLK_TYPE_CFG_FINAL   (SKEIN_T1_BLK_TYPE_CFG | SKEIN_T1_FLAG_FINAL)

◆ SKEIN_T1_BLK_TYPE_KDF

#define SKEIN_T1_BLK_TYPE_KDF   SKEIN_T1_BLK_TYPE(KDF) /* key identifier for KDF */

◆ SKEIN_T1_BLK_TYPE_KEY

#define SKEIN_T1_BLK_TYPE_KEY   SKEIN_T1_BLK_TYPE(KEY) /* key, for MAC and KDF */

◆ SKEIN_T1_BLK_TYPE_MASK

#define SKEIN_T1_BLK_TYPE_MASK   SKEIN_T1_BLK_TYPE(MASK) /* field bit mask */

◆ SKEIN_T1_BLK_TYPE_MSG

#define SKEIN_T1_BLK_TYPE_MSG   SKEIN_T1_BLK_TYPE(MSG) /* message processing */

◆ SKEIN_T1_BLK_TYPE_NONCE

#define SKEIN_T1_BLK_TYPE_NONCE   SKEIN_T1_BLK_TYPE(NONCE)/* nonce for PRNG */

◆ SKEIN_T1_BLK_TYPE_OUT

#define SKEIN_T1_BLK_TYPE_OUT   SKEIN_T1_BLK_TYPE(OUT) /* output stage */

◆ SKEIN_T1_BLK_TYPE_OUT_FINAL

#define SKEIN_T1_BLK_TYPE_OUT_FINAL   (SKEIN_T1_BLK_TYPE_OUT | SKEIN_T1_FLAG_FINAL)

◆ SKEIN_T1_BLK_TYPE_PERS

#define SKEIN_T1_BLK_TYPE_PERS   SKEIN_T1_BLK_TYPE(PERS) /* personalization string */

◆ SKEIN_T1_BLK_TYPE_PK

#define SKEIN_T1_BLK_TYPE_PK   SKEIN_T1_BLK_TYPE(PK) /* public key (for digital signature hashing) */

◆ SKEIN_T1_FLAG_BIT_PAD

#define SKEIN_T1_FLAG_BIT_PAD   (((u64b_t) 1 ) << SKEIN_T1_POS_BIT_PAD)

◆ SKEIN_T1_FLAG_FINAL

#define SKEIN_T1_FLAG_FINAL   (((u64b_t) 1 ) << SKEIN_T1_POS_FINAL)

◆ SKEIN_T1_FLAG_FIRST

#define SKEIN_T1_FLAG_FIRST   (((u64b_t) 1 ) << SKEIN_T1_POS_FIRST)

◆ SKEIN_T1_POS_BIT_PAD

#define SKEIN_T1_POS_BIT_PAD   SKEIN_T1_BIT(119) /* bit 119 : partial final input byte */

◆ SKEIN_T1_POS_BLK_TYPE

#define SKEIN_T1_POS_BLK_TYPE   SKEIN_T1_BIT(120) /* bits 120..125: type field */

◆ SKEIN_T1_POS_FINAL

#define SKEIN_T1_POS_FINAL   SKEIN_T1_BIT(127) /* bit 127 : final block flag */

◆ SKEIN_T1_POS_FIRST

#define SKEIN_T1_POS_FIRST   SKEIN_T1_BIT(126) /* bits 126 : first block flag */

◆ SKEIN_T1_POS_TREE_LVL

#define SKEIN_T1_POS_TREE_LVL   SKEIN_T1_BIT(112) /* bits 112..118: level in hash tree */

◆ SKEIN_T1_TREE_LEVEL

#define SKEIN_T1_TREE_LEVEL (   n)    (((u64b_t) (n)) << SKEIN_T1_POS_TREE_LVL)

◆ SKEIN_T1_TREE_LVL_MASK

#define SKEIN_T1_TREE_LVL_MASK   (((u64b_t)0x7F) << SKEIN_T1_POS_TREE_LVL)

◆ SKEIN_TREE_HASH

#define SKEIN_TREE_HASH   (1)

◆ SKEIN_UNROLL_1024

#define SKEIN_UNROLL_1024   ((SKEIN_LOOP)%10)

◆ SKEIN_UNROLL_256

#define SKEIN_UNROLL_256   (((SKEIN_LOOP)/100)%10)

◆ SKEIN_UNROLL_512

#define SKEIN_UNROLL_512   (((SKEIN_LOOP)/10)%10)

◆ SKEIN_USE_ASM

#define SKEIN_USE_ASM   (0) /* default is all C code (no ASM) */

◆ SKEIN_VERSION

#define SKEIN_VERSION   (1)

◆ ts

#define ts   (kw + KW_TWK_BASE)

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
R_256_0_0 
R_256_0_1 
R_256_1_0 
R_256_1_1 
R_256_2_0 
R_256_2_1 
R_256_3_0 
R_256_3_1 
R_256_4_0 
R_256_4_1 
R_256_5_0 
R_256_5_1 
R_256_6_0 
R_256_6_1 
R_256_7_0 
R_256_7_1 
R_512_0_0 
R_512_0_1 
R_512_0_2 
R_512_0_3 
R_512_1_0 
R_512_1_1 
R_512_1_2 
R_512_1_3 
R_512_2_0 
R_512_2_1 
R_512_2_2 
R_512_2_3 
R_512_3_0 
R_512_3_1 
R_512_3_2 
R_512_3_3 
R_512_4_0 
R_512_4_1 
R_512_4_2 
R_512_4_3 
R_512_5_0 
R_512_5_1 
R_512_5_2 
R_512_5_3 
R_512_6_0 
R_512_6_1 
R_512_6_2 
R_512_6_3 
R_512_7_0 
R_512_7_1 
R_512_7_2 
R_512_7_3 
R1024_0_0 
R1024_0_1 
R1024_0_2 
R1024_0_3 
R1024_0_4 
R1024_0_5 
R1024_0_6 
R1024_0_7 
R1024_1_0 
R1024_1_1 
R1024_1_2 
R1024_1_3 
R1024_1_4 
R1024_1_5 
R1024_1_6 
R1024_1_7 
R1024_2_0 
R1024_2_1 
R1024_2_2 
R1024_2_3 
R1024_2_4 
R1024_2_5 
R1024_2_6 
R1024_2_7 
R1024_3_0 
R1024_3_1 
R1024_3_2 
R1024_3_3 
R1024_3_4 
R1024_3_5 
R1024_3_6 
R1024_3_7 
R1024_4_0 
R1024_4_1 
R1024_4_2 
R1024_4_3 
R1024_4_4 
R1024_4_5 
R1024_4_6 
R1024_4_7 
R1024_5_0 
R1024_5_1 
R1024_5_2 
R1024_5_3 
R1024_5_4 
R1024_5_5 
R1024_5_6 
R1024_5_7 
R1024_6_0 
R1024_6_1 
R1024_6_2 
R1024_6_3 
R1024_6_4 
R1024_6_5 
R1024_6_6 
R1024_6_7 
R1024_7_0 
R1024_7_1 
R1024_7_2 
R1024_7_3 
R1024_7_4 
R1024_7_5 
R1024_7_6 
R1024_7_7 

Function Documentation

◆ Final()

static HashReturn Final ( hashState state,
BitSequence hashval 
)
static

◆ Init()

static HashReturn Init ( hashState state,
int  hashbitlen 
)
static

◆ Skein1024_Final()

static int Skein1024_Final ( Skein1024_Ctxt_t ctx,
u08b_t hashVal 
)
static

◆ Skein1024_Init()

static int Skein1024_Init ( Skein1024_Ctxt_t ctx,
size_t  hashBitLen 
)
static

◆ Skein1024_Process_Block()

static void Skein1024_Process_Block ( Skein1024_Ctxt_t ctx,
const u08b_t blkPtr,
size_t  blkCnt,
size_t  byteCntAdd 
)
static

◆ Skein1024_Update()

static int Skein1024_Update ( Skein1024_Ctxt_t ctx,
const u08b_t msg,
size_t  msgByteCnt 
)
static

◆ Skein_256_Final()

static int Skein_256_Final ( Skein_256_Ctxt_t ctx,
u08b_t hashVal 
)
static

◆ Skein_256_Process_Block()

static void Skein_256_Process_Block ( Skein_256_Ctxt_t ctx,
const u08b_t blkPtr,
size_t  blkCnt,
size_t  byteCntAdd 
)
static

◆ Skein_256_Update()

static int Skein_256_Update ( Skein_256_Ctxt_t ctx,
const u08b_t msg,
size_t  msgByteCnt 
)
static

◆ Skein_512_Final()

static int Skein_512_Final ( Skein_512_Ctxt_t ctx,
u08b_t hashVal 
)
static

◆ Skein_512_Init()

static int Skein_512_Init ( Skein_512_Ctxt_t ctx,
size_t  hashBitLen 
)
static

◆ Skein_512_Process_Block()

static void Skein_512_Process_Block ( Skein_512_Ctxt_t ctx,
const u08b_t blkPtr,
size_t  blkCnt,
size_t  byteCntAdd 
)
static

◆ Skein_512_Update()

static int Skein_512_Update ( Skein_512_Ctxt_t ctx,
const u08b_t msg,
size_t  msgByteCnt 
)
static

◆ skein_hash()

HashReturn skein_hash ( int  hashbitlen,
const BitSequence data,
DataLength  databitlen,
BitSequence hashval 
)

◆ Update()

static HashReturn Update ( hashState state,
const BitSequence data,
DataLength  databitlen 
)
static

Variable Documentation

◆ SKEIN1024_IV_1024

const u64b_t SKEIN1024_IV_1024[]
Initial value:
=
{
MK_64(0xD593DA07,0x41E72355),
MK_64(0x15B5E511,0xAC73E00C),
MK_64(0x5180E5AE,0xBAF2C4F0),
MK_64(0x03BD41D3,0xFCBCAFAF),
MK_64(0x1CAEC6FD,0x1983A898),
MK_64(0x6E510B8B,0xCDD0589F),
MK_64(0x77E2BDFD,0xC6394ADA),
MK_64(0xC11E1DB5,0x24DCB0A3),
MK_64(0xD6D14AF9,0xC6329AB5),
MK_64(0x6A9B0BFC,0x6EB67E0D),
MK_64(0x9243C60D,0xCCFF1332),
MK_64(0x1A1F1DDE,0x743F02D4),
MK_64(0x0996753C,0x10ED0BB8),
MK_64(0x6572DD22,0xF2B4969A),
MK_64(0x61FD3062,0xD00A579A),
}
#define MK_64
Definition: skein.c:330

◆ SKEIN1024_IV_384

const u64b_t SKEIN1024_IV_384[]
Initial value:
=
{
MK_64(0x5102B6B8,0xC1894A35),
MK_64(0xFEEBC9E3,0xFE8AF11A),
MK_64(0x0C807F06,0xE32BED71),
MK_64(0x60C13A52,0xB41A91F6),
MK_64(0x9716D35D,0xD4917C38),
MK_64(0xE780DF12,0x6FD31D3A),
MK_64(0x797846B6,0xC898303A),
MK_64(0xB172C2A8,0xB3572A3B),
MK_64(0xC9BC8203,0xA6104A6C),
MK_64(0x65909338,0xD75624F4),
MK_64(0x94BCC568,0x4B3F81A0),
MK_64(0x3EBBF51E,0x10ECFD46),
MK_64(0x2DF50F0B,0xEEB08542),
MK_64(0x3B5A6530,0x0DBC6516),
MK_64(0x484B9CD2,0x167BBCE1),
}

◆ SKEIN1024_IV_512

const u64b_t SKEIN1024_IV_512[]
Initial value:
=
{
MK_64(0xCAEC0E5D,0x7C1B1B18),
MK_64(0xA01B0E04,0x5F03E802),
MK_64(0x33840451,0xED912885),
MK_64(0x374AFB04,0xEAEC2E1C),
MK_64(0xDF25A0E2,0x813581F7),
MK_64(0xE4004093,0x8B12F9D2),
MK_64(0xA662D539,0xC2ED39B6),
MK_64(0xFA8B85CF,0x45D8C75A),
MK_64(0x8316ED8E,0x29EDE796),
MK_64(0x053289C0,0x2E9F91B8),
MK_64(0xC3F8EF1D,0x6D518B73),
MK_64(0xBDCEC3C4,0xD5EF332E),
MK_64(0x549A7E52,0x22974487),
MK_64(0x67070872,0x5B749816),
MK_64(0xB9CD28FB,0xF0581BD1),
}

◆ SKEIN_256_IV_128

const u64b_t SKEIN_256_IV_128[]
Initial value:
=
{
MK_64(0xE1111906,0x964D7260),
MK_64(0x883DAAA7,0x7C8D811C),
MK_64(0x10080DF4,0x91960F7A),
}

◆ SKEIN_256_IV_160

const u64b_t SKEIN_256_IV_160[]
Initial value:
=
{
MK_64(0x14202314,0x72825E98),
MK_64(0x2AC4E9A2,0x5A77E590),
MK_64(0xD47A5856,0x8838D63E),
}

◆ SKEIN_256_IV_224

const u64b_t SKEIN_256_IV_224[]
Initial value:
=
{
MK_64(0xC6098A8C,0x9AE5EA0B),
MK_64(0x876D5686,0x08C5191C),
MK_64(0x99CB88D7,0xD7F53884),
}

◆ SKEIN_256_IV_256

const u64b_t SKEIN_256_IV_256[]
Initial value:
=
{
MK_64(0xFC9DA860,0xD048B449),
MK_64(0x2FCA6647,0x9FA7D833),
MK_64(0xB33BC389,0x6656840F),
}

◆ SKEIN_512_IV_128

const u64b_t SKEIN_512_IV_128[]
Initial value:
=
{
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),
}

◆ SKEIN_512_IV_160

const u64b_t SKEIN_512_IV_160[]
Initial value:
=
{
MK_64(0x28B81A2A,0xE013BD91),
MK_64(0xC2F11668,0xB5BDF78F),
MK_64(0x1760D8F3,0xF6A56F12),
MK_64(0x4FB74758,0x8239904F),
MK_64(0x21EDE07F,0x7EAF5056),
MK_64(0xD908922E,0x63ED70B8),
MK_64(0xB8EC76FF,0xECCB52FA),
}

◆ SKEIN_512_IV_224

const u64b_t SKEIN_512_IV_224[]
Initial value:
=
{
MK_64(0xCCD06162,0x48677224),
MK_64(0xCBA65CF3,0xA92339EF),
MK_64(0x8CCD69D6,0x52FF4B64),
MK_64(0x398AED7B,0x3AB890B4),
MK_64(0x0F59D1B1,0x457D2BD0),
MK_64(0x6776FE65,0x75D4EB3D),
MK_64(0x99FBC70E,0x997413E9),
}

◆ SKEIN_512_IV_256

const u64b_t SKEIN_512_IV_256[]
Initial value:
=
{
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),
}

◆ SKEIN_512_IV_384

const u64b_t SKEIN_512_IV_384[]
Initial value:
=
{
MK_64(0xA3F6C6BF,0x3A75EF5F),
MK_64(0xB0FEF9CC,0xFD84FAA4),
MK_64(0x9D77DD66,0x3D770CFE),
MK_64(0xD798CBF3,0xB468FDDA),
MK_64(0x1BC4A666,0x8A0E4465),
MK_64(0x7ED7D434,0xE5807407),
MK_64(0x548FC1AC,0xD4EC44D6),
}

◆ SKEIN_512_IV_512

const u64b_t SKEIN_512_IV_512[]
Initial value:
=
{
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),
}