00001
00015 #ifndef DKUTIL_C_SNOW20_H
00016 #define DKUTIL_C_SNOW20_H
00017
00018 #include "dkcOSIndependent.h"
00019
00020
00021 #define dkcdSNOW2_BOX_SIZE 16
00022
00023
00024 typedef struct dkc_SNOW2{
00025
00027 uint32 sw[dkcdSNOW2_BOX_SIZE];
00029 uint32 outfrom_fsm,r1,r2;
00031 union{
00032 uint64 a64[dkcdSNOW2_BOX_SIZE / 2];
00033 uint32 a32[dkcdSNOW2_BOX_SIZE];
00034 uint16 a16[dkcdSNOW2_BOX_SIZE * 2];
00035 uint8 a8[dkcdSNOW2_BOX_SIZE * 4];
00036 }u_store;
00037
00038
00040 uint8 store_size;
00041 }DKC_SNOW2;
00042
00043
00044
00053 DKC_EXTERN DKC_SNOW2 *WINAPI dkcAllocSNOW2(BYTE *key,size_t keysize,
00054 uint32 IV3,uint32 IV2,uint32 IV1,uint32 IV0);
00055
00056 DKC_EXTERN int WINAPI dkcSNOW2Init(DKC_SNOW2 *p,uint8 *key,size_t keysize,uint32 IV3,uint32 IV2,uint32 IV1,uint32 IV0);
00057
00058 DKC_INLINE DKC_SNOW2 *dkcAllocSNOW2Const(const BYTE *key,size_t keysize,uint32 IV3,uint32 IV2,uint32 IV1,uint32 IV0)
00059 {
00060 uint8 v[32];
00061 switch(keysize){
00062 case 16:
00063 memcpy(v,key,16);
00064 memset(&v[16],0,16);
00065 break;
00066 case 32:
00067 memcpy(v,key,32);
00068 break;
00069 default:
00070 return NULL;
00071 }
00072 return dkcAllocSNOW2(v,keysize,IV3,IV2,IV1,IV0);
00073 }
00074
00075 DKC_EXTERN int WINAPI dkcFreeSNOW2(DKC_SNOW2 **);
00076
00078 DKC_EXTERN uint8 WINAPI dkcSNOW2Process(DKC_SNOW2 *p);
00079 #define dkcSNOW2_Byte(p) dkcSNOW2Process(p)
00080
00083
00084 DKC_EXTERN int WINAPI dkcSNOW2EncryptNoDestDOE(DKC_SNOW2 *p,uint8 *inout,size_t size);
00085
00086 DKC_EXTERN int WINAPI dkcSNOW2EncryptDOE(DKC_SNOW2 *,uint8 *dest,size_t dsize,const uint8 *src,size_t ssize);
00087 #define dkcSNOW2DecryptDOE(a,b,c,d,e) dkcSNOW2EncryptDOE(a,b,c,d,e)
00088
00089 #define dkcSNOW2DecryptNoDestDOE(a,b,c) dkcSNOW2EncryptNoDestDOE(a,b,c)
00090
00091
00092
00093 #endif //end of include once