#include "dkcOSIndependent.h"
dkcSNOW20.hのインクルード依存関係図
このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。
構成 | |
struct | dkc_SNOW2 |
マクロ定義 | |
#define | dkcdSNOW2_BOX_SIZE 16 |
型定義 | |
typedef dkc_SNOW2 | DKC_SNOW2 |
関数 | |
DKC_EXTERN DKC_SNOW2 *WINAPI | dkcAllocSNOW2 (BYTE *key, size_t keysize, uint32 IV3, uint32 IV2, uint32 IV1, uint32 IV0) |
DKC_EXTERN int WINAPI | dkcSNOW2Init (DKC_SNOW2 *p, uint8 *key, size_t keysize, uint32 IV3, uint32 IV2, uint32 IV1, uint32 IV0) |
DKC_EXTERN int WINAPI | dkcFreeSNOW2 (DKC_SNOW2 **) |
DKC_EXTERN uint32 WINAPI | dkcSNOW2_4Byte (DKC_SNOW2 *p) |
DKC_EXTERN uint32 WINAPI | dkcSNOW2Process (DKC_SNOW2 *, uint32 u) |
DKC_EXTERN int WINAPI | dkcSNOW2EncryptBlock512NoDestDOE (DKC_SNOW2 *, uint32 *block) |
dkcSNOW20.h で定義されています。
|
dkcSNOW20.h の 18 行で定義されています。 参照元 dkcSNOW2Init(), feedback(), と snow_clock(). |
|
参照元 dkcAllocSNOW2(), dkcFreeSNOW2(), dkcSNOW2_4Byte(), dkcSNOW2EncryptBlock512NoDestDOE(), dkcSNOW2Init(), dkcSNOW2Process(), feedback(), snow_clock(), と update(). |
|
dkcSNOW20.c の 325 行で定義されています。 参照先 BYTE, DKC_SNOW2, dkcAllocate(), dkcFreeSNOW2(), dkcSNOW2Init(), と NULL.
00327 { 00328 DKC_SNOW2 *p; 00329 int r; 00330 p = dkcAllocate(sizeof(DKC_SNOW2)); 00331 if(NULL==p){ 00332 return NULL; 00333 } 00334 r = dkcSNOW2Init(p,key,keysize,IV3,IV2,IV1,IV0); 00335 if(DKUTIL_FAILED(r)){ 00336 goto Error; 00337 } 00338 return p; 00339 Error: 00340 dkcFreeSNOW2(&p); 00341 return NULL; 00342 } |
|
dkcSNOW20.c の 346 行で定義されています。 参照元 dkcAllocSNOW2().
00346 { 00347 int r; 00348 r = dkcFree(pp); 00349 return r; 00350 } |
|
dkcSNOW20.c の 352 行で定義されています。 参照先 DKC_SNOW2, dkc_SNOW2::outfrom_fsm, snow_clock(), と dkc_SNOW2::snow_ptr. 参照元 dkcSNOW2Process().
00352 { 00353 snow_clock(p); 00354 return (p->outfrom_fsm ^ *(p->snow_ptr)); 00355 00356 } |
|
dkcSNOW20.c の 86 行で定義されています。 参照先 a_mul, ainv_mul, DKC_SNOW2, dkcmNOT_ASSERT, dkc_SNOW2::r1, dkc_SNOW2::r2, snow_byte, dkc_SNOW2::snow_ptr, と dkc_SNOW2::sw.
00086 { 00087 uint32 *snow_ptr = p->snow_ptr; 00088 uint32 fsmtmp,*sw = p->sw; 00089 uint32 r1 = p->r1; 00090 uint32 r2 = p->r2; 00091 dkcmNOT_ASSERT(snow_ptr != p->sw); 00092 if(snow_ptr != p->sw){ 00093 return edk_LogicError; 00094 } 00095 sw[0] =a_mul(sw[0] )^ sw[2] ^ainv_mul(sw[11] ); 00096 fsmtmp=r2+ sw[5] ; 00097 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00098 r1=fsmtmp; 00099 keystream_block[0]=(r1+ sw[0] )^r2^ sw[1] ; 00100 00101 sw[1] =a_mul(sw[1] )^ sw[3] ^ainv_mul(sw[12]); 00102 fsmtmp=r2+ sw[6] ; 00103 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00104 r1=fsmtmp; 00105 keystream_block[1]=(r1+ sw[1] )^r2^ sw[2] ; 00106 00107 sw[2] =a_mul(sw[2] )^ sw[4] ^ainv_mul(sw[13] ); 00108 fsmtmp=r2+ sw[7] ; 00109 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00110 r1=fsmtmp; 00111 keystream_block[2]=(r1+ sw[2] )^r2^ sw[3] ; 00112 00113 sw[3] =a_mul(sw[3] )^ sw[5] ^ainv_mul(sw[14] ); 00114 fsmtmp=r2+ sw[8] ; 00115 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00116 r1=fsmtmp; 00117 keystream_block[3]=(r1+ sw[3] )^r2^ sw[4] ; 00118 00119 sw[4 ]=a_mul(sw[4] )^ sw[6] ^ainv_mul(sw[15] ); 00120 fsmtmp=r2+ sw[9] ; 00121 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00122 r1=fsmtmp; 00123 keystream_block[4]=(r1+ sw[4] )^r2^ sw[5] ; 00124 00125 sw[5] =a_mul(sw[5] )^ sw[7] ^ainv_mul(sw[0] ); 00126 fsmtmp=r2+ sw[10] ; 00127 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00128 r1=fsmtmp; 00129 keystream_block[5]=(r1+ sw[5] )^r2^ sw[6] ; 00130 00131 sw[6] =a_mul(sw[6] )^ sw[8] ^ainv_mul(sw[1] ); 00132 fsmtmp=r2+ sw[11] ; 00133 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00134 r1=fsmtmp; 00135 keystream_block[6]=(r1+ sw[6] )^r2^ sw[7] ; 00136 00137 sw[7] =a_mul(sw[7] )^ sw[9] ^ainv_mul(sw[2] ); 00138 fsmtmp=r2+ sw[12 ]; 00139 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00140 r1=fsmtmp; 00141 keystream_block[7]=(r1+ sw[7] )^r2^ sw[8] ; 00142 00143 sw[8] =a_mul(sw[8] )^ sw[10] ^ainv_mul(sw[3] ); 00144 fsmtmp=r2+ sw[13] ; 00145 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00146 r1=fsmtmp; 00147 keystream_block[8]=(r1+ sw[8] )^r2^ sw[9] ; 00148 00149 sw[9] =a_mul(sw[9] )^ sw[11] ^ainv_mul(sw[4] ); 00150 fsmtmp=r2+ sw[14] ; 00151 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00152 r1=fsmtmp; 00153 keystream_block[9]=(r1+ sw[9] )^r2^ sw[10] ; 00154 00155 sw[10] =a_mul(sw[10] )^ sw[12] ^ainv_mul(sw[5] ); 00156 fsmtmp=r2+ sw[15] ; 00157 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00158 r1=fsmtmp; 00159 keystream_block[10]=(r1+ sw[10] )^r2^ sw[11] ; 00160 00161 sw[11] =a_mul(sw[11] )^ sw[13] ^ainv_mul(sw[6] ); 00162 fsmtmp=r2+ sw[0] ; 00163 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00164 r1=fsmtmp; 00165 keystream_block[11]=(r1+ sw[11] )^r2^ sw[12] ; 00166 00167 sw[12] =a_mul(sw[12] )^ sw[14] ^ainv_mul(sw[7] ); 00168 fsmtmp=r2+ sw[1 ]; 00169 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00170 r1=fsmtmp; 00171 keystream_block[12]=(r1+ sw[12] )^r2^ sw[13] ; 00172 00173 sw[13] =a_mul(sw[13] )^ sw[15] ^ainv_mul(sw[8] ); 00174 fsmtmp=r2+ sw[2] ; 00175 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00176 r1=fsmtmp; 00177 keystream_block[13]=(r1+ sw[13] )^r2^ sw[14] ; 00178 00179 sw[14] =a_mul(sw[14] )^ sw[0] ^ainv_mul(sw[9] ); 00180 fsmtmp=r2+ sw[3] ; 00181 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00182 r1=fsmtmp; 00183 keystream_block[14]=(r1+ sw[14] )^r2^ sw[15] ; 00184 00185 sw[15] =a_mul(sw[15] )^ sw[1] ^ainv_mul(sw[10] ); 00186 fsmtmp=r2+ sw[4] ; 00187 r2=snow_T0[snow_byte(0,r1)]^snow_T1[snow_byte(1,r1)]^snow_T2[snow_byte(2,r1)]^snow_T3[snow_byte(3,r1)]; 00188 r1=fsmtmp; 00189 keystream_block[15]=(r1+ sw[15] )^r2^ sw[0] ; 00190 //update 00191 p->r1 = r1; 00192 p->r2 = r2; 00193 p->snow_ptr = snow_ptr; 00194 00195 return edk_SUCCEEDED; 00196 } |
|
dkcSNOW20.c の 246 行で定義されています。 参照先 DKC_SNOW2, dkcdSNOW2_BOX_SIZE, feedback(), NULL, dkc_SNOW2::r1, dkc_SNOW2::r2, dkc_SNOW2::snow_ptr, dkc_SNOW2::sw, と update(). 参照元 dkcAllocSNOW2().
00247 { 00248 int i; 00249 //DKC_4BYTE_UNION_LITTLE_ENDIAN_BASE bk[1]; 00250 00251 //bk[0].dword = *((uint32)key); 00252 //bk[1].dword = *(((uint32)key) + 1); 00253 if(NULL==p || NULL==key){ 00254 return edk_ArgumentException; 00255 } 00256 switch(keysize) 00257 { 00258 case 16: 00259 p->sw[15] = snow2_key_shake(key,0); 00260 p->sw[14] = snow2_key_shake(key,4); 00261 p->sw[13] = snow2_key_shake(key,8); 00262 p->sw[12] = snow2_key_shake(key,12); 00263 p->sw[11] = ~p->sw[15]; /* bitwip->sw[e inverp->sw[e */ 00264 p->sw[10] = ~p->sw[14]; 00265 p->sw[9] = ~p->sw[13]; 00266 p->sw[8] = ~p->sw[12]; 00267 p->sw[7] = p->sw[15]; /* jup->sw[t copy */ 00268 p->sw[6] = p->sw[14]; 00269 p->sw[5] = p->sw[13]; 00270 p->sw[4] = p->sw[12]; 00271 p->sw[3] =~p->sw[15]; /* bitwip->sw[e inverp->sw[e */ 00272 p->sw[2] =~p->sw[14]; 00273 p->sw[1] =~p->sw[13]; 00274 p->sw[0] =~p->sw[12]; 00275 break; 00276 case 32: 00277 p->sw[15] = snow2_key_shake(key,0); 00278 p->sw[14] = snow2_key_shake(key,4); 00279 p->sw[13] = snow2_key_shake(key,8); 00280 p->sw[12] = snow2_key_shake(key,12); 00281 p->sw[11] = snow2_key_shake(key,16); 00282 p->sw[10] = snow2_key_shake(key,20); 00283 p->sw[9] = snow2_key_shake(key,24); 00284 p->sw[8] = snow2_key_shake(key,28); 00285 p->sw[7] =~p->sw[15]; // bitwip->sw[e inverp->sw[e 00286 p->sw[6] =~p->sw[14]; 00287 p->sw[5] =~p->sw[13]; 00288 p->sw[4] =~p->sw[12]; 00289 p->sw[3] =~p->sw[11]; 00290 p->sw[2] =~p->sw[10]; 00291 p->sw[1] =~p->sw[9]; 00292 p->sw[0] =~p->sw[8]; 00293 break; 00294 default: 00295 return edk_ArgumentException; 00296 } 00297 00298 00299 // XOR IV values 00300 p->sw[15]^=IV0; 00301 p->sw[12]^=IV1; 00302 p->sw[10]^=IV2; 00303 p->sw[9] ^=IV3; 00304 00305 p->snow_ptr = p->sw; 00306 00307 p->r1=0; 00308 p->r2=0; 00309 00310 // メモリの後半の方に前半の同じ内容をコピー 00311 for(i=0;i<dkcdSNOW2_BOX_SIZE;i++) 00312 { 00313 p->sw[i+dkcdSNOW2_BOX_SIZE]=p->sw[dkcdSNOW2_BOX_SIZE]; 00314 } 00315 00316 update(p); 00317 00318 for(i=0;i<dkcdSNOW2_BOX_SIZE * 2;i++){ 00319 feedback(p); 00320 } 00321 return edk_SUCCEEDED; 00322 } |
|
dkcSNOW20.c の 359 行で定義されています。 参照先 DKC_SNOW2, と dkcSNOW2_4Byte().
00360 { 00361 u ^= dkcSNOW2_4Byte(p); 00362 return u; 00363 } |