Changeset 11429 for trunk/cscrypt/des.c
- Timestamp:
- 07/28/18 21:31:01 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/cscrypt/des.c
r11413 r11429 138 138 #include "des.h" 139 139 140 static const uint8_t weak_keys[16][8] = { 141 // weak keys 142 {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01}, 143 {0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE}, 144 {0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}, 145 {0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0}, 146 // semi-weak keys 147 {0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE}, 148 {0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01}, 149 {0x1F,0xE0,0x1F,0xE0,0x0E,0xF1,0x0E,0xF1}, 150 {0xE0,0x1F,0xE0,0x1F,0xF1,0x0E,0xF1,0x0E}, 151 {0x01,0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1}, 152 {0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1,0x01}, 153 {0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E,0xFE}, 154 {0xFE,0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E}, 155 {0x01,0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E}, 156 {0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E,0x01}, 157 {0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE}, 158 {0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1}}; 159 160 static const uint8_t odd_parity[] ={ 161 1, 1, 2, 2, 4, 4, 7, 7, 8, 8, 11, 11, 13, 13, 14, 14, 162 16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31, 163 32, 32, 35, 35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44, 47, 47, 164 49, 49, 50, 50, 52, 52, 55, 55, 56, 56, 59, 59, 61, 61, 62, 62, 165 64, 64, 67, 67, 69, 69, 70, 70, 73, 73, 74, 74, 76, 76, 79, 79, 166 81, 81, 82, 82, 84, 84, 87, 87, 88, 88, 91, 91, 93, 93, 94, 94, 167 97, 97, 98, 98, 100,100,103,103,104,104,107,107,109,109,110,110, 168 112,112,115,115,117,117,118,118,121,121,122,122,124,124,127,127, 169 128,128,131,131,133,133,134,134,137,137,138,138,140,140,143,143, 170 145,145,146,146,148,148,151,151,152,152,155,155,157,157,158,158, 171 161,161,162,162,164,164,167,167,168,168,171,171,173,173,174,174, 172 176,176,179,179,181,181,182,182,185,185,186,186,188,188,191,191, 173 193,193,194,194,196,196,199,199,200,200,203,203,205,205,206,206, 174 208,208,211,211,213,213,214,214,217,217,218,218,220,220,223,223, 175 224,224,227,227,229,229,230,230,233,233,234,234,236,236,239,239, 176 241,241,242,242,244,244,247,247,248,248,251,251,253,253,254,254}; 140 static const uint8_t weak_keys[16][8] = 141 { 142 // weak keys 143 {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01}, 144 {0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE}, 145 {0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}, 146 {0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0}, 147 // semi-weak keys 148 {0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE}, 149 {0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01}, 150 {0x1F,0xE0,0x1F,0xE0,0x0E,0xF1,0x0E,0xF1}, 151 {0xE0,0x1F,0xE0,0x1F,0xF1,0x0E,0xF1,0x0E}, 152 {0x01,0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1}, 153 {0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1,0x01}, 154 {0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E,0xFE}, 155 {0xFE,0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E}, 156 {0x01,0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E}, 157 {0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E,0x01}, 158 {0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE}, 159 {0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1} 160 }; 161 162 static const uint8_t odd_parity[] = 163 { 164 1, 1, 2, 2, 4, 4, 7, 7, 8, 8, 11, 11, 13, 13, 14, 14, 165 16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31, 166 32, 32, 35, 35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44, 47, 47, 167 49, 49, 50, 50, 52, 52, 55, 55, 56, 56, 59, 59, 61, 61, 62, 62, 168 64, 64, 67, 67, 69, 69, 70, 70, 73, 73, 74, 74, 76, 76, 79, 79, 169 81, 81, 82, 82, 84, 84, 87, 87, 88, 88, 91, 91, 93, 93, 94, 94, 170 97, 97, 98, 98, 100,100,103,103,104,104,107,107,109,109,110,110, 171 112,112,115,115,117,117,118,118,121,121,122,122,124,124,127,127, 172 128,128,131,131,133,133,134,134,137,137,138,138,140,140,143,143, 173 145,145,146,146,148,148,151,151,152,152,155,155,157,157,158,158, 174 161,161,162,162,164,164,167,167,168,168,171,171,173,173,174,174, 175 176,176,179,179,181,181,182,182,185,185,186,186,188,188,191,191, 176 193,193,194,194,196,196,199,199,200,200,203,203,205,205,206,206, 177 208,208,211,211,213,213,214,214,217,217,218,218,220,220,223,223, 178 224,224,227,227,229,229,230,230,233,233,234,234,236,236,239,239, 179 241,241,242,242,244,244,247,247,248,248,251,251,253,253,254,254 180 }; 177 181 178 182 static const uint8_t shifts2[16] = {0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0}; 179 183 180 static const uint32_t des_skb[8][64] = { 181 { 184 static const uint32_t des_skb[8][64] = 185 { 186 { 182 187 0x00000000,0x00000010,0x20000000,0x20000010, 183 188 0x00010000,0x00010010,0x20010000,0x20010010, … … 196 201 0x00080820,0x00080830,0x20080820,0x20080830, 197 202 0x00090820,0x00090830,0x20090820,0x20090830, 198 203 },{ 199 204 200 205 0x00000000,0x02000000,0x00002000,0x02002000, … … 214 219 0x10000404,0x12000404,0x10002404,0x12002404, 215 220 0x10200404,0x12200404,0x10202404,0x12202404, 216 221 },{ 217 222 218 223 0x00000000,0x00000001,0x00040000,0x00040001, … … 232 237 0x08000202,0x08000203,0x08040202,0x08040203, 233 238 0x09000202,0x09000203,0x09040202,0x09040203, 234 239 },{ 235 240 236 241 0x00000000,0x00100000,0x00000100,0x00100100, … … 250 255 0x04021000,0x04121000,0x04021100,0x04121100, 251 256 0x04021008,0x04121008,0x04021108,0x04121108, 252 257 },{ 253 258 254 259 0x00000000,0x10000000,0x00010000,0x10010000, … … 268 273 0x20101000,0x30101000,0x20111000,0x30111000, 269 274 0x20101004,0x30101004,0x20111004,0x30111004, 270 275 },{ 271 276 272 277 0x00000000,0x08000000,0x00000008,0x08000008, … … 286 291 0x02020001,0x0A020001,0x02020009,0x0A020009, 287 292 0x02020401,0x0A020401,0x02020409,0x0A020409, 288 293 },{ 289 294 290 295 0x00000000,0x00000100,0x00080000,0x00080100, … … 304 309 0x00200210,0x00200310,0x00280210,0x00280310, 305 310 0x01200210,0x01200310,0x01280210,0x01280310, 306 311 },{ 307 312 308 313 0x00000000,0x04000000,0x00040000,0x04040000, … … 322 327 0x00002820,0x04002820,0x00042820,0x04042820, 323 328 0x00002822,0x04002822,0x00042822,0x04042822, 324 }}; 325 326 static const uint32_t des_SPtrans[8][64] = { 329 } 330 }; 331 332 static const uint32_t des_SPtrans[8][64] = 333 { 327 334 { 328 335 0x00820200, 0x00020000, 0x80800000, 0x80820200, … … 342 349 0x00020000, 0x00800000, 0x80800200, 0x00820200, 343 350 0x80000000, 0x80820000, 0x00000200, 0x80020200, 344 351 },{ 345 352 346 353 0x10042004, 0x00000000, 0x00042000, 0x10040000, … … 360 367 0x10040004, 0x00040000, 0x00002004, 0x10002000, 361 368 0x10002004, 0x00000004, 0x10040000, 0x00042000, 362 369 },{ 363 370 364 371 0x41000000, 0x01010040, 0x00000040, 0x41000040, … … 378 385 0x01000040, 0x00000000, 0x41010000, 0x40000040, 379 386 0x41000000, 0x40010040, 0x00000040, 0x01010000, 380 387 },{ 381 388 382 389 0x00100402, 0x04000400, 0x00000002, 0x04100402, … … 396 403 0x00100002, 0x00100400, 0x04100000, 0x04000402, 397 404 0x00000402, 0x04000000, 0x04000002, 0x04100400, 398 405 },{ 399 406 400 407 0x02000000, 0x00004000, 0x00000100, 0x02004108, … … 414 421 0x00004100, 0x02004008, 0x02000100, 0x00000108, 415 422 0x00000008, 0x00004108, 0x02004000, 0x02000008, 416 423 },{ 417 424 418 425 0x20000010, 0x00080010, 0x00000000, 0x20080800, … … 432 439 0x00000800, 0x20000010, 0x20000810, 0x20080800, 433 440 0x20080000, 0x00000810, 0x00000010, 0x20080010, 434 441 },{ 435 442 436 443 0x00001000, 0x00000080, 0x00400080, 0x00400001, … … 450 457 0x00401080, 0x00000001, 0x00001001, 0x00401081, 451 458 0x00400001, 0x00401080, 0x00401000, 0x00001001, 452 459 },{ 453 460 454 461 0x08200020, 0x08208000, 0x00008020, 0x00000000, … … 468 475 0x00000020, 0x08208000, 0x00208020, 0x00000000, 469 476 0x08000000, 0x08200020, 0x00008000, 0x00208020, 470 }}; 477 } 478 }; 471 479 472 480 static const int32_t DES_KEY_SZ=8; … … 475 483 { 476 484 int32_t i; 477 485 478 486 for (i=0; i < DES_KEY_SZ; i++) 479 487 key[i]=odd_parity[key[i]&0xff]; … … 483 491 { 484 492 int32_t i; 485 486 for (i=0; i < DES_KEY_SZ; i++) { 487 if (key[i] != odd_parity[key[i]&0xff]) 493 494 for (i=0; i < DES_KEY_SZ; i++) 495 { 496 if (key[i] != odd_parity[key[i]&0xff]) 488 497 return 0; 489 498 } … … 494 503 { 495 504 int32_t i, j; 496 497 for (i=0; i < 16; i++) { 498 for(j=0;j < DES_KEY_SZ; j++) { 499 if (weak_keys[i][j] != key[j]) { 505 506 for (i=0; i < 16; i++) 507 { 508 for(j=0; j < DES_KEY_SZ; j++) 509 { 510 if (weak_keys[i][j] != key[j]) 511 { 500 512 // not weak 501 513 continue; … … 508 520 } 509 521 510 static uint32_t Get32bits(const uint8_t* key, int32_t kindex) { 522 static uint32_t Get32bits(const uint8_t* key, int32_t kindex) 523 { 511 524 return(((key[kindex+3]&0xff)<<24) + ((key[kindex+2]&0xff)<<16) + ((key[kindex+1]&0xff)<<8) + (key[kindex]&0xff)); 512 525 } … … 518 531 int32_t kIndex; 519 532 int32_t i; 520 521 //if (!check_parity(key)) {522 // return 0;523 //}524 525 //if (des_is_weak_key(key)) {526 // return 0;527 //}528 529 533 inIndex=0; 530 534 kIndex=0; 531 532 535 c =Get32bits(key, inIndex); 533 536 d =Get32bits(key, inIndex+4); 534 535 537 t=(((d>>4)^c)&0x0f0f0f0f); 536 538 c^=t; 537 539 d^=(t<<4); 538 539 540 t=(((c<<(16-(-2)))^c)&0xcccc0000); 540 541 c=c^t^(t>>(16-(-2))); 541 542 542 t=((d<<(16-(-2)))^d)&0xcccc0000; 543 543 d=d^t^(t>>(16-(-2))); 544 545 544 t=((d>>1)^c)&0x55555555; 546 545 c^=t; 547 546 d^=(t<<1); 548 549 547 t=((c>>8)^d)&0x00ff00ff; 550 548 d^=t; 551 549 c^=(t<<8); 552 553 550 t=((d>>1)^c)&0x55555555; 554 551 c^=t; 555 552 d^=(t<<1); 556 557 553 d= (((d&0x000000ff)<<16)| (d&0x0000ff00) |((d&0x00ff0000)>>16)|((c&0xf0000000)>>4)); 558 554 c&=0x0fffffff; 559 560 for (i=0; i < 16; i++) { 561 if (shifts2[i]) { 555 for (i=0; i < 16; i++) 556 { 557 if (shifts2[i]) 558 { 562 559 c=((c>>2)|(c<<26)); 563 560 d=((d>>2)|(d<<26)); 564 } else { 561 } 562 else 563 { 565 564 c=((c>>1)|(c<<27)); 566 565 d=((d>>1)|(d<<27)); 567 566 } 568 569 567 c&=0x0fffffff; 570 568 d&=0x0fffffff; 571 572 569 s= des_skb[0][ (c )&0x3f ]| 573 570 des_skb[1][((c>> 6)&0x03)|((c>> 7)&0x3c)]| 574 571 des_skb[2][((c>>13)&0x0f)|((c>>14)&0x30)]| 575 572 des_skb[3][((c>>20)&0x01)|((c>>21)&0x06) | 576 ((c>>22)&0x38)];573 ((c>>22)&0x38)]; 577 574 t= des_skb[4][ (d )&0x3f ]| 578 575 des_skb[5][((d>> 7)&0x03)|((d>> 8)&0x3c)]| 579 576 des_skb[6][ (d>>15)&0x3f ]| 580 577 des_skb[7][((d>>21)&0x0f)|((d>>22)&0x30)]; 581 582 578 schedule[kIndex++]=((t<<16)|(s&0x0000ffff))&0xffffffff; 583 584 579 s=((s>>16)|(t&0xffff0000)); 585 586 580 s=(s<<4)|(s>>28); 587 588 581 schedule[kIndex++]=s&0xffffffff; 589 582 } 590 591 583 return 1; 592 584 } 593 585 594 static uint32_t _lrotr(uint32_t i) { 586 static uint32_t _lrotr(uint32_t i) 587 { 595 588 return((i>>4) | ((i&0xff)<<28)); 596 589 } … … 631 624 r&=0xffffffff; 632 625 633 if (do_encrypt) { 634 for (i=0; i < 32; i+=8) { 635 { u=(r^ks[i+0 ]); t=r^ks[i+0+1]; t=(_lrotr(t)); l^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; }; 636 { u=(l^ks[i+2 ]); t=l^ks[i+2+1]; t=(_lrotr(t)); r^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; }; 637 { u=(r^ks[i+4 ]); t=r^ks[i+4+1]; t=(_lrotr(t)); l^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; }; 638 { u=(l^ks[i+6 ]); t=l^ks[i+6+1]; t=(_lrotr(t)); r^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; }; 626 if (do_encrypt) 627 { 628 for (i=0; i < 32; i+=8) 629 { 630 { 631 u=(r^ks[i+0 ]); 632 t=r^ks[i+0+1]; 633 t=(_lrotr(t)); 634 l^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; 635 }; 636 { 637 u=(l^ks[i+2 ]); 638 t=l^ks[i+2+1]; 639 t=(_lrotr(t)); 640 r^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; 641 }; 642 { 643 u=(r^ks[i+4 ]); 644 t=r^ks[i+4+1]; 645 t=(_lrotr(t)); 646 l^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; 647 }; 648 { 649 u=(l^ks[i+6 ]); 650 t=l^ks[i+6+1]; 651 t=(_lrotr(t)); 652 r^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; 653 }; 639 654 } 640 } else { 641 for (i=30; i > 0; i-=8) { 642 { u=(r^ks[i-0 ]); t=r^ks[i-0+1]; t=(_lrotr(t)); l^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; }; 643 { u=(l^ks[i-2 ]); t=l^ks[i-2+1]; t=(_lrotr(t)); r^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; }; 644 { u=(r^ks[i-4 ]); t=r^ks[i-4+1]; t=(_lrotr(t)); l^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; }; 645 { u=(l^ks[i-6 ]); t=l^ks[i-6+1]; t=(_lrotr(t)); r^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; }; 655 } 656 else 657 { 658 for (i=30; i > 0; i-=8) 659 { 660 { 661 u=(r^ks[i-0 ]); 662 t=r^ks[i-0+1]; 663 t=(_lrotr(t)); 664 l^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; 665 }; 666 { 667 u=(l^ks[i-2 ]); 668 t=l^ks[i-2+1]; 669 t=(_lrotr(t)); 670 r^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; 671 }; 672 { 673 u=(r^ks[i-4 ]); 674 t=r^ks[i-4+1]; 675 t=(_lrotr(t)); 676 l^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; 677 }; 678 { 679 u=(l^ks[i-6 ]); 680 t=l^ks[i-6+1]; 681 t=(_lrotr(t)); 682 r^= des_SPtrans[1][(t )&0x3f]| des_SPtrans[3][(t>> 8)&0x3f]| des_SPtrans[5][(t>>16)&0x3f]| des_SPtrans[7][(t>>24)&0x3f]| des_SPtrans[0][(u )&0x3f]| des_SPtrans[2][(u>> 8)&0x3f]| des_SPtrans[4][(u>>16)&0x3f]| des_SPtrans[6][(u>>24)&0x3f]; 683 }; 646 684 } 647 685 } … … 714 752 { 715 753 case 16: 716 for(i = 8; i < 16; ++i){ 754 for(i = 8; i < 16; ++i) 755 { 717 756 data[i] = v1[i] ^ v2[i]; 718 } /* fallthrough */757 } 719 758 case 8: 720 for(i = 4; i < 8; ++i){ 759 for(i = 4; i < 8; ++i) 760 { 721 761 data[i] = v1[i] ^ v2[i]; 722 } /* fallthrough */762 } 723 763 case 4: 724 for(i = 0; i < 4; ++i){ 764 for(i = 0; i < 4; ++i) 765 { 725 766 data[i] = v1[i] ^ v2[i]; 726 } /* fallthrough */767 } 727 768 break; 728 769 default: 729 while(len--) { *data++ = *v1++ ^ *v2++; } 770 while(len--) 771 { 772 *data++ = *v1++ ^ *v2++; 773 } 730 774 break; 731 775 } … … 735 779 { 736 780 uint32_t schedule[32]; 737 int32_t i; 738 781 int32_t i; 782 739 783 des_set_key(key, schedule); 740 784 741 785 len&=~7; 742 743 for(i=0; i<len; i+=8) { 786 787 for(i=0; i<len; i+=8) 788 { 744 789 des(&data[i], schedule, 1); 745 790 } … … 749 794 { 750 795 uint32_t schedule[32]; 751 int32_t i; 752 796 int32_t i; 797 753 798 des_set_key(key, schedule); 754 799 755 800 len&=~7; 756 801 757 for(i=0; i<len; i+=8) { 802 for(i=0; i<len; i+=8) 803 { 758 804 des(&data[i], schedule, 0); 759 805 } … … 762 808 void des_cbc_encrypt(uint8_t* data, const uint8_t* iv, const uint8_t* key, int32_t len) 763 809 { 764 const uint8_t *civ = iv; 810 const uint8_t *civ = iv; 765 811 uint32_t schedule[32]; 766 int32_t i; 812 int32_t i; 767 813 768 814 des_set_key(key, schedule); 769 815 770 816 len&=~7; 771 817 772 for(i=0; i<len; i+=8) { 818 for(i=0; i<len; i+=8) 819 { 773 820 xxor(&data[i],8,&data[i],civ); 774 821 civ=&data[i]; … … 788 835 789 836 memcpy(civ[n],iv,8); 790 for(i=0; i<len; i+=8,data+=8,n^=1) { 837 for(i=0; i<len; i+=8,data+=8,n^=1) 838 { 791 839 memcpy(civ[1-n],data,8); 792 des(data, schedule 840 des(data, schedule,0); 793 841 xxor(data,8,data,civ[n]); 794 842 } … … 797 845 void des_ede2_cbc_encrypt(uint8_t* data, const uint8_t* iv, const uint8_t* key1, const uint8_t* key2, int32_t len) 798 846 { 799 const uint8_t *civ = iv; 847 const uint8_t *civ = iv; 800 848 uint32_t schedule1[32], schedule2[32]; 801 int32_t i; 849 int32_t i; 802 850 803 851 des_set_key(key1, schedule1); … … 806 854 len&=~7; 807 855 808 for(i=0; i<len; i+=8) { 856 for(i=0; i<len; i+=8) 857 { 809 858 xxor(&data[i],8,&data[i],civ); 810 859 civ=&data[i]; 811 860 812 861 des(&data[i], schedule1, 1); 813 862 des(&data[i], schedule2, 0); … … 824 873 des_set_key(key1, schedule1); 825 874 des_set_key(key2, schedule2); 826 875 827 876 len&=~7; 828 877 829 878 memcpy(civ[n],iv,8); 830 for(i=0; i<len; i+=8,data+=8,n^=1) { 879 for(i=0; i<len; i+=8,data+=8,n^=1) 880 { 831 881 memcpy(civ[1-n],data,8); 832 882 des(data, schedule1, 0); 833 883 des(data, schedule2, 1); 834 des(data, schedule1, 0); 884 des(data, schedule1, 0); 835 885 xxor(data,8,data,civ[n]); 836 886 } 837 887 } 888 889 void _3DES(uint8_t *data, uint8_t *key) 890 { 891 uint32_t ks1[32], ks2[32]; 892 des_set_key(key, ks1); 893 des_set_key(key+8, ks2); 894 des(data, ks1, 0); 895 des(data, ks2, 1); 896 des(data, ks1, 0); 897 }
Note:
See TracChangeset
for help on using the changeset viewer.