00001
00013 #include "dkcSNOW20.h"
00014 #include "snow2tab.h"
00015
00016 #include <stdlib.h>
00017
00018
00019
00020
00021 #ifdef ORDER_DCBA //little endian win32
00022 #define snow2_key_shake(key,begin_offset) \
00023 (((uint32)*(key+begin_offset))<<24) | \
00024 (((uint32)*(key+1+begin_offset))<<16) | \
00025 (((uint32)*(key+2+begin_offset))<<8) | \
00026 (((uint32)*(key+3+begin_offset))) \
00027
00028 #else if defined(ORDER_ABCD) // big endian motorola
00029
00030 #define snow2_key_shake(key,begin_offset) \
00031 (((uint32)*(key+begin_offset))<<24) | \
00032 (((uint32)*(key+1+begin_offset))<<16) | \
00033 (((uint32)*(key+2+begin_offset))<<8) | \
00034 (((uint32)*(key+3+begin_offset))) \
00035 #else if defined(ORDER_BADC) // vix ?
00036
00037 #endif
00038
00039
00040 #define ainv_mul(w) (((w)>>8)^(snow_alphainv_mul[w&0xff]))
00041 #define a_mul(w) (((w)<<8)^(snow_alpha_mul[w>>24]))
00042
00043
00044 #define snow_byte(n,w) (dkcmGETBYTE(w,n) & 0xff)
00045
00046
00047 DKC_INLINE int WINAPI dkcSNOW2_64Byte(DKC_SNOW2 *p,uint32 *keystream_block){
00048
00049 uint32 fsmtmp,*sw = p->sw;
00050 uint32 r1 = p->r1;
00051 uint32 r2 = p->r2;
00052
00053 dkcmASSERT(p->store_size == 0);
00054
00055 sw[0] =a_mul(sw[0] )^ sw[2] ^ainv_mul(sw[11] );
00056 fsmtmp=r2+ sw[5] ;
00057 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)];
00058 r1=fsmtmp;
00059 keystream_block[0]=(r1+ sw[0] )^r2^ sw[1] ;
00060
00061 sw[1] =a_mul(sw[1] )^ sw[3] ^ainv_mul(sw[12]);
00062 fsmtmp=r2+ sw[6] ;
00063 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)];
00064 r1=fsmtmp;
00065 keystream_block[1]=(r1+ sw[1] )^r2^ sw[2] ;
00066
00067 sw[2] =a_mul(sw[2] )^ sw[4] ^ainv_mul(sw[13] );
00068 fsmtmp=r2+ sw[7] ;
00069 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)];
00070 r1=fsmtmp;
00071 keystream_block[2]=(r1+ sw[2] )^r2^ sw[3] ;
00072
00073 sw[3] =a_mul(sw[3] )^ sw[5] ^ainv_mul(sw[14] );
00074 fsmtmp=r2+ sw[8] ;
00075 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)];
00076 r1=fsmtmp;
00077 keystream_block[3]=(r1+ sw[3] )^r2^ sw[4] ;
00078
00079 sw[4 ]=a_mul(sw[4] )^ sw[6] ^ainv_mul(sw[15] );
00080 fsmtmp=r2+ sw[9] ;
00081 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)];
00082 r1=fsmtmp;
00083 keystream_block[4]=(r1+ sw[4] )^r2^ sw[5] ;
00084
00085 sw[5] =a_mul(sw[5] )^ sw[7] ^ainv_mul(sw[0] );
00086 fsmtmp=r2+ sw[10] ;
00087 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)];
00088 r1=fsmtmp;
00089 keystream_block[5]=(r1+ sw[5] )^r2^ sw[6] ;
00090
00091 sw[6] =a_mul(sw[6] )^ sw[8] ^ainv_mul(sw[1] );
00092 fsmtmp=r2+ sw[11] ;
00093 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)];
00094 r1=fsmtmp;
00095 keystream_block[6]=(r1+ sw[6] )^r2^ sw[7] ;
00096
00097 sw[7] =a_mul(sw[7] )^ sw[9] ^ainv_mul(sw[2] );
00098 fsmtmp=r2+ sw[12 ];
00099 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)];
00100 r1=fsmtmp;
00101 keystream_block[7]=(r1+ sw[7] )^r2^ sw[8] ;
00102
00103 sw[8] =a_mul(sw[8] )^ sw[10] ^ainv_mul(sw[3] );
00104 fsmtmp=r2+ sw[13] ;
00105 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)];
00106 r1=fsmtmp;
00107 keystream_block[8]=(r1+ sw[8] )^r2^ sw[9] ;
00108
00109 sw[9] =a_mul(sw[9] )^ sw[11] ^ainv_mul(sw[4] );
00110 fsmtmp=r2+ sw[14] ;
00111 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)];
00112 r1=fsmtmp;
00113 keystream_block[9]=(r1+ sw[9] )^r2^ sw[10] ;
00114
00115 sw[10] =a_mul(sw[10] )^ sw[12] ^ainv_mul(sw[5] );
00116 fsmtmp=r2+ sw[15] ;
00117 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)];
00118 r1=fsmtmp;
00119 keystream_block[10]=(r1+ sw[10] )^r2^ sw[11] ;
00120
00121 sw[11] =a_mul(sw[11] )^ sw[13] ^ainv_mul(sw[6] );
00122 fsmtmp=r2+ sw[0] ;
00123 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)];
00124 r1=fsmtmp;
00125 keystream_block[11]=(r1+ sw[11] )^r2^ sw[12] ;
00126
00127 sw[12] =a_mul(sw[12] )^ sw[14] ^ainv_mul(sw[7] );
00128 fsmtmp=r2+ sw[1 ];
00129 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)];
00130 r1=fsmtmp;
00131 keystream_block[12]=(r1+ sw[12] )^r2^ sw[13] ;
00132
00133 sw[13] =a_mul(sw[13] )^ sw[15] ^ainv_mul(sw[8] );
00134 fsmtmp=r2+ sw[2] ;
00135 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)];
00136 r1=fsmtmp;
00137 keystream_block[13]=(r1+ sw[13] )^r2^ sw[14] ;
00138
00139 sw[14] =a_mul(sw[14] )^ sw[0] ^ainv_mul(sw[9] );
00140 fsmtmp=r2+ sw[3] ;
00141 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)];
00142 r1=fsmtmp;
00143 keystream_block[14]=(r1+ sw[14] )^r2^ sw[15] ;
00144
00145 sw[15] =a_mul(sw[15] )^ sw[1] ^ainv_mul(sw[10] );
00146 fsmtmp=r2+ sw[4] ;
00147 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)];
00148 r1=fsmtmp;
00149 keystream_block[15]=(r1+ sw[15] )^r2^ sw[0] ;
00150
00151 p->r1 = r1;
00152 p->r2 = r2;
00153
00154
00155 return edk_SUCCEEDED;
00156 }
00157
00158 static DKC_INLINE int store(DKC_SNOW2 *p){
00159 int r;
00160 dkcmNOT_ASSERT(0 != p->store_size);
00161 if(0 != p->store_size) return edk_LogicError;
00162 r = dkcSNOW2_64Byte(p,p->u_store.a32);
00163 p->store_size = 64;
00164 return r;
00165 }
00166
00167 int WINAPI dkcSNOW2Init(DKC_SNOW2 *p,uint8 *key,size_t keysize,uint32 IV3,uint32 IV2,uint32 IV1,uint32 IV0)
00168 {
00169 int i;
00170
00171 uint32 s15,s14,s13,s12,s11,s10,s9,s8,s7,s6,s5,s4,s3,s2,s1,s0;
00172 uint32 outfrom_fsm,fsmtmp,r1,r2;
00173
00174 if(NULL==p || NULL==key){
00175 return edk_ArgumentException;
00176 }
00177 switch(keysize)
00178 {
00179 case 16:
00180 p->sw[15] = snow2_key_shake(key,0);
00181 p->sw[14] = snow2_key_shake(key,4);
00182 p->sw[13] = snow2_key_shake(key,8);
00183 p->sw[12] = snow2_key_shake(key,12);
00184 p->sw[11] = ~p->sw[15];
00185 p->sw[10] = ~p->sw[14];
00186 p->sw[9] = ~p->sw[13];
00187 p->sw[8] = ~p->sw[12];
00188 p->sw[7] = p->sw[15];
00189 p->sw[6] = p->sw[14];
00190 p->sw[5] = p->sw[13];
00191 p->sw[4] = p->sw[12];
00192 p->sw[3] =~p->sw[15];
00193 p->sw[2] =~p->sw[14];
00194 p->sw[1] =~p->sw[13];
00195 p->sw[0] =~p->sw[12];
00196 break;
00197 case 32:
00198 p->sw[15] = snow2_key_shake(key,0);
00199 p->sw[14] = snow2_key_shake(key,4);
00200 p->sw[13] = snow2_key_shake(key,8);
00201 p->sw[12] = snow2_key_shake(key,12);
00202 p->sw[11] = snow2_key_shake(key,16);
00203 p->sw[10] = snow2_key_shake(key,20);
00204 p->sw[9] = snow2_key_shake(key,24);
00205 p->sw[8] = snow2_key_shake(key,28);
00206 p->sw[7] =~p->sw[15];
00207 p->sw[6] =~p->sw[14];
00208 p->sw[5] =~p->sw[13];
00209 p->sw[4] =~p->sw[12];
00210 p->sw[3] =~p->sw[11];
00211 p->sw[2] =~p->sw[10];
00212 p->sw[1] =~p->sw[9];
00213 p->sw[0] =~p->sw[8];
00214 break;
00215 default:
00216 return edk_ArgumentException;
00217 }
00218
00219
00220
00221 p->sw[15]^=IV0;
00222 p->sw[12]^=IV1;
00223 p->sw[10]^=IV2;
00224 p->sw[9] ^=IV3;
00225
00226
00227
00228 p->r1=0;
00229 p->r2=0;
00230
00231
00232 s15 = p->sw[15];
00233 s14 = p->sw[14];
00234 s13 = p->sw[13];
00235 s12 = p->sw[12];
00236 s11 = p->sw[11];
00237 s10 = p->sw[10];
00238 s9 = p->sw[9];
00239 s8 = p->sw[8];
00240 s7 = p->sw[7];
00241 s6 = p->sw[6];
00242 s5 = p->sw[5];
00243 s4 = p->sw[4];
00244 s3 = p->sw[3];
00245 s2 = p->sw[2];
00246 s1 = p->sw[1];
00247 s0 = p->sw[0];
00248 outfrom_fsm = p->outfrom_fsm;
00249 r1 = p->r1;
00250 r2 = p->r2;
00251
00252
00253 for(i=0;i<2;i++)
00254 {
00255
00256 outfrom_fsm=(r1+ s15 )^r2;
00257 s0 =a_mul(s0 )^ s2 ^ainv_mul(s11 )^outfrom_fsm;
00258 fsmtmp=r2+ s5 ;
00259 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)];
00260 r1=fsmtmp;
00261
00262 outfrom_fsm=(r1+ s0 )^r2;
00263 s1 =a_mul(s1 )^ s3 ^ainv_mul(s12 )^outfrom_fsm;
00264 fsmtmp=r2+ s6 ;
00265 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)];
00266 r1=fsmtmp;
00267
00268 outfrom_fsm=(r1+ s1 )^r2;
00269 s2 =a_mul(s2 )^ s4 ^ainv_mul(s13 )^outfrom_fsm;
00270 fsmtmp=r2+ s7 ;
00271 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)];
00272 r1=fsmtmp;
00273
00274 outfrom_fsm=(r1+ s2 )^r2;
00275 s3 =a_mul(s3 )^ s5 ^ainv_mul(s14 )^outfrom_fsm;
00276 fsmtmp=r2+ s8 ;
00277 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)];
00278 r1=fsmtmp;
00279
00280 outfrom_fsm=(r1+ s3 )^r2;
00281 s4 =a_mul(s4 )^ s6 ^ainv_mul(s15 )^outfrom_fsm;
00282 fsmtmp=r2+ s9 ;
00283 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)];
00284 r1=fsmtmp;
00285
00286 outfrom_fsm=(r1+ s4 )^r2;
00287 s5 =a_mul(s5 )^ s7 ^ainv_mul(s0 )^outfrom_fsm;
00288 fsmtmp=r2+ s10 ;
00289 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)];
00290 r1=fsmtmp;
00291
00292 outfrom_fsm=(r1+ s5 )^r2;
00293 s6 =a_mul(s6 )^ s8 ^ainv_mul(s1 )^outfrom_fsm;
00294 fsmtmp=r2+ s11 ;
00295 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)];
00296 r1=fsmtmp;
00297
00298 outfrom_fsm=(r1+ s6 )^r2;
00299 s7 =a_mul(s7 )^ s9 ^ainv_mul(s2 )^outfrom_fsm;
00300 fsmtmp=r2+ s12 ;
00301 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)];
00302 r1=fsmtmp;
00303
00304 outfrom_fsm=(r1+ s7 )^r2;
00305 s8 =a_mul(s8 )^ s10 ^ainv_mul(s3 )^outfrom_fsm;
00306 fsmtmp=r2+ s13 ;
00307 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)];
00308 r1=fsmtmp;
00309
00310 outfrom_fsm=(r1+ s8 )^r2;
00311 s9 =a_mul(s9 )^ s11 ^ainv_mul(s4 )^outfrom_fsm;
00312 fsmtmp=r2+ s14 ;
00313 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)];
00314 r1=fsmtmp;
00315
00316 outfrom_fsm=(r1+ s9 )^r2;
00317 s10 =a_mul(s10 )^ s12 ^ainv_mul(s5 )^outfrom_fsm;
00318 fsmtmp=r2+ s15 ;
00319 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)];
00320 r1=fsmtmp;
00321
00322 outfrom_fsm=(r1+ s10 )^r2;
00323 s11 =a_mul(s11 )^ s13 ^ainv_mul(s6 )^outfrom_fsm;
00324 fsmtmp=r2+ s0 ;
00325 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)];
00326 r1=fsmtmp;
00327
00328 outfrom_fsm=(r1+ s11 )^r2;
00329 s12 =a_mul(s12 )^ s14 ^ainv_mul(s7 )^outfrom_fsm;
00330 fsmtmp=r2+ s1 ;
00331 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)];
00332 r1=fsmtmp;
00333
00334 outfrom_fsm=(r1+ s12 )^r2;
00335 s13 =a_mul(s13 )^ s15 ^ainv_mul(s8 )^outfrom_fsm;
00336 fsmtmp=r2+ s2 ;
00337 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)];
00338 r1=fsmtmp;
00339
00340 outfrom_fsm=(r1+ s13 )^r2;
00341 s14 =a_mul(s14 )^ s0 ^ainv_mul(s9 )^outfrom_fsm;
00342 fsmtmp=r2+ s3 ;
00343 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)];
00344 r1=fsmtmp;
00345
00346 outfrom_fsm=(r1+ s14 )^r2;
00347 s15 =a_mul(s15 )^ s1 ^ainv_mul(s10 )^outfrom_fsm;
00348 fsmtmp=r2+ s4 ;
00349 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)];
00350 r1=fsmtmp;
00351 }
00352 p->sw[15] = s15 ;
00353 p->sw[14] = s14 ;
00354 p->sw[13] = s13 ;
00355 p->sw[12] = s12 ;
00356 p->sw[11] = s11 ;
00357 p->sw[10] = s10 ;
00358 p->sw[9] = s9 ;
00359 p->sw[8] = s8 ;
00360 p->sw[7] = s7 ;
00361 p->sw[6] = s6 ;
00362 p->sw[5] = s5;
00363 p->sw[4] = s4 ;
00364 p->sw[3] = s3 ;
00365 p->sw[2] = s2 ;
00366 p->sw[1] = s1 ;
00367 p->sw[0] = s0 ;
00368 p->outfrom_fsm = outfrom_fsm ;
00369 p->r1 = r1 ;
00370 p->r2 = r2;
00371 return store(p);
00372 }
00373
00374
00375 DKC_SNOW2 *WINAPI dkcAllocSNOW2(BYTE *key,size_t keysize,
00376 uint32 IV3,uint32 IV2,uint32 IV1,uint32 IV0)
00377 {
00378 DKC_SNOW2 *p;
00379 int r;
00380 p = dkcAllocate(sizeof(DKC_SNOW2));
00381 if(NULL==p){
00382 return NULL;
00383 }
00384 p->store_size = 0;
00385 r = dkcSNOW2Init(p,key,keysize,IV3,IV2,IV1,IV0);
00386 if(DKUTIL_FAILED(r)){
00387 goto Error;
00388 }
00389
00390 return p;
00391 Error:
00392 dkcFreeSNOW2(&p);
00393 return NULL;
00394 }
00395
00396
00397
00398 int WINAPI dkcFreeSNOW2(DKC_SNOW2 **pp){
00399 int r;
00400 r = dkcFree(pp);
00401 return r;
00402 }
00403
00404 #define get_offset(p) (64 - p->store_size)
00405
00406 DKC_INLINE uint8 WINAPI dkcSNOW2_Byte(DKC_SNOW2 *p){
00407 int r = 0;
00408 size_t offset;
00409
00410 if(p->store_size <=0){
00411 r = store(p);
00412 dkcmNOT_ASSERT(DKUTIL_FAILED(r));
00413 }
00414 offset = get_offset(p);
00415 p->store_size--;
00416 return p->u_store.a8[offset];
00417 }
00418
00419
00420
00421 int WINAPI dkcSNOW2EncryptDOE(DKC_SNOW2 *p,uint8 *dest,size_t dsize,const uint8 *src,size_t ssize)
00422 {
00423 if(dsize < ssize){
00424 return edk_ArgumentException;
00425 }
00426 if(dest != src){
00427 memcpy(dest,src,ssize);
00428 }
00429 return dkcSNOW2EncryptNoDestDOE(p,dest,ssize);
00430
00431 }
00432
00433
00434 int WINAPI dkcSNOW2EncryptNoDestDOE(DKC_SNOW2 *p,uint8 *inout,size_t size)
00435 {
00436
00437
00438
00439 size_t i;
00440 int r;
00441 size_t count,rest;
00442
00443 uint64 *io64;
00444
00445 if(size <= 0) return edk_SUCCEEDED;
00446 for(i=0;;){
00447 if((size > 64) && ( p->store_size == 0 || 64==p->store_size)){
00448 break;
00449 }
00450 for(;i<size;i++){
00451 inout[i] ^= dkcSNOW2_Byte(p);
00452 if(p->store_size == 0){
00453 break;
00454 }
00455 }
00456 break;
00457 }
00458 size-=i;
00459 inout+=i;
00460 if(size <= 0) return edk_SUCCEEDED;
00461
00462 count = size / 64;
00463 rest = size % 64;
00464 if(64!=p->store_size){
00465 r = store(p);
00466 dkcmNOT_ASSERT(DKUTIL_FAILED(r));
00467 }
00468
00469 io64 =(uint64*)inout;
00470 for(;i<count;i++){
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490 io64[0] ^= p->u_store.a64[0];
00491 io64[1] ^= p->u_store.a64[1];
00492 io64[2] ^= p->u_store.a64[2];
00493 io64[3] ^= p->u_store.a64[3];
00494 io64[4] ^= p->u_store.a64[4];
00495 io64[5] ^= p->u_store.a64[5];
00496 io64[6] ^= p->u_store.a64[6];
00497 io64[7] ^= p->u_store.a64[7];
00498 io64+=8;
00499 p->store_size = 0;
00500 store(p);
00501 }
00502
00503 inout =(uint8*)io64;
00504 return dkcSNOW2EncryptNoDestDOE(p,inout,rest);
00505
00506 }