Print this page
pass 2

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/crypt_modules/bsdbf/blowfish.c
          +++ new/usr/src/lib/crypt_modules/bsdbf/blowfish.c
↓ open down ↓ 74 lines elided ↑ open up ↑
  75   75                   + (s)[0x300 + ( (x)     &0xFF)])
  76   76  
  77   77  #define BLFRND(s,p,i,j,n) (i ^= F(s,j) ^ (p)[n])
  78   78  
  79   79  void
  80   80  Blowfish_encipher(c, xl, xr)
  81   81          blf_ctx *c;
  82   82          uint32_t *xl;
  83   83          uint32_t *xr;
  84   84  {
  85      -/* CRYPT DELETE START */
  86   85          uint32_t Xl;
  87   86          uint32_t Xr;
  88   87          uint32_t *s = c->S[0];
  89   88          uint32_t *p = c->P;
  90   89  
  91   90          Xl = *xl;
  92   91          Xr = *xr;
  93   92  
  94   93          Xl ^= p[0];
  95   94          BLFRND(s, p, Xr, Xl, 1); BLFRND(s, p, Xl, Xr, 2);
  96   95          BLFRND(s, p, Xr, Xl, 3); BLFRND(s, p, Xl, Xr, 4);
  97   96          BLFRND(s, p, Xr, Xl, 5); BLFRND(s, p, Xl, Xr, 6);
  98   97          BLFRND(s, p, Xr, Xl, 7); BLFRND(s, p, Xl, Xr, 8);
  99   98          BLFRND(s, p, Xr, Xl, 9); BLFRND(s, p, Xl, Xr, 10);
 100   99          BLFRND(s, p, Xr, Xl, 11); BLFRND(s, p, Xl, Xr, 12);
 101  100          BLFRND(s, p, Xr, Xl, 13); BLFRND(s, p, Xl, Xr, 14);
 102  101          BLFRND(s, p, Xr, Xl, 15); BLFRND(s, p, Xl, Xr, 16);
 103  102  
 104  103          *xl = Xr ^ p[17];
 105  104          *xr = Xl;
 106      -/* CRYPT DELETE END */
 107  105  }
 108  106  
 109  107  void
 110  108  Blowfish_decipher(c, xl, xr)
 111  109          blf_ctx *c;
 112  110          uint32_t *xl;
 113  111          uint32_t *xr;
 114  112  {
 115      -/* CRYPT DELETE START */
 116  113          uint32_t Xl;
 117  114          uint32_t Xr;
 118  115          uint32_t *s = c->S[0];
 119  116          uint32_t *p = c->P;
 120  117  
 121  118          Xl = *xl;
 122  119          Xr = *xr;
 123  120  
 124  121          Xl ^= p[17];
 125  122          BLFRND(s, p, Xr, Xl, 16); BLFRND(s, p, Xl, Xr, 15);
 126  123          BLFRND(s, p, Xr, Xl, 14); BLFRND(s, p, Xl, Xr, 13);
 127  124          BLFRND(s, p, Xr, Xl, 12); BLFRND(s, p, Xl, Xr, 11);
 128  125          BLFRND(s, p, Xr, Xl, 10); BLFRND(s, p, Xl, Xr, 9);
 129  126          BLFRND(s, p, Xr, Xl, 8); BLFRND(s, p, Xl, Xr, 7);
 130  127          BLFRND(s, p, Xr, Xl, 6); BLFRND(s, p, Xl, Xr, 5);
 131  128          BLFRND(s, p, Xr, Xl, 4); BLFRND(s, p, Xl, Xr, 3);
 132  129          BLFRND(s, p, Xr, Xl, 2); BLFRND(s, p, Xl, Xr, 1);
 133  130  
 134  131          *xl = Xr ^ p[0];
 135  132          *xr = Xl;
 136      -/* CRYPT DELETE END */
 137  133  }
 138  134  
 139  135  void
 140  136  Blowfish_initstate(c)
 141  137          blf_ctx *c;
 142  138  {
 143      -/* CRYPT DELETE START */
 144      -
 145  139  /* P-box and S-box tables initialized with digits of Pi */
 146  140  
 147  141          const blf_ctx initstate =
 148  142  
 149  143          { {
 150  144                  {
 151  145                          0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
 152  146                          0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
 153  147                          0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
 154  148                          0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
↓ open down ↓ 255 lines elided ↑ open up ↑
 410  404          },
 411  405          {
 412  406                  0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
 413  407                  0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
 414  408                  0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
 415  409                  0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
 416  410                  0x9216d5d9, 0x8979fb1b
 417  411          } };
 418  412  
 419  413          *c = initstate;
 420      -
 421      -/* CRYPT DELETE END */
 422  414  }
 423  415  
 424  416  uint32_t
 425  417  Blowfish_stream2word(const uint8_t *data, uint16_t databytes, uint16_t *current)
 426  418  {
 427  419          uint8_t i;
 428  420          uint16_t j;
 429  421          uint32_t temp;
 430  422  
 431  423          temp = 0x00000000;
 432      -/* CRYPT DELETE START */
 433  424          j = *current;
 434  425  
 435  426          for (i = 0; i < 4; i++, j++) {
 436  427                  if (j >= databytes)
 437  428                          j = 0;
 438  429                  temp = (temp << 8) | data[j];
 439  430          }
 440  431  
 441  432          *current = j;
 442      -/* CRYPT DELETE END */
 443  433          return temp;
 444  434  }
 445  435  
 446  436  void
 447  437  Blowfish_expand0state(blf_ctx *c, const uint8_t *key, uint16_t keybytes)
 448  438  {
 449      -/* CRYPT DELETE START */
 450  439          uint16_t i;
 451  440          uint16_t j;
 452  441          uint16_t k;
 453  442          uint32_t temp;
 454  443          uint32_t datal;
 455  444          uint32_t datar;
 456  445  
 457  446          j = 0;
 458  447          for (i = 0; i < BLF_N + 2; i++) {
 459  448                  /* Extract 4 int8 to 1 int32 from keystream */
↓ open down ↓ 12 lines elided ↑ open up ↑
 472  461          }
 473  462  
 474  463          for (i = 0; i < 4; i++) {
 475  464                  for (k = 0; k < 256; k += 2) {
 476  465                          Blowfish_encipher(c, &datal, &datar);
 477  466  
 478  467                          c->S[i][k] = datal;
 479  468                          c->S[i][k + 1] = datar;
 480  469                  }
 481  470          }
 482      -/* CRYPT DELETE END */
 483  471  }
 484  472  
 485  473  
 486  474  void
 487  475  Blowfish_expandstate(blf_ctx *c, const uint8_t *data, uint16_t databytes,
 488  476                       const uint8_t *key, uint16_t keybytes)
 489  477  {
 490      -/* CRYPT DELETE START */
 491  478          uint16_t i;
 492  479          uint16_t j;
 493  480          uint16_t k;
 494  481          uint32_t temp;
 495  482          uint32_t datal;
 496  483          uint32_t datar;
 497  484  
 498  485          j = 0;
 499  486          for (i = 0; i < BLF_N + 2; i++) {
 500  487                  /* Extract 4 int8 to 1 int32 from keystream */
↓ open down ↓ 16 lines elided ↑ open up ↑
 517  504          for (i = 0; i < 4; i++) {
 518  505                  for (k = 0; k < 256; k += 2) {
 519  506                          datal ^= Blowfish_stream2word(data, databytes, &j);
 520  507                          datar ^= Blowfish_stream2word(data, databytes, &j);
 521  508                          Blowfish_encipher(c, &datal, &datar);
 522  509  
 523  510                          c->S[i][k] = datal;
 524  511                          c->S[i][k + 1] = datar;
 525  512                  }
 526  513          }
 527      -
 528      -/* CRYPT DELETE END */
 529  514  }
 530  515  
 531  516  void
 532  517  blf_key(blf_ctx *c, const uint8_t *k, uint16_t len)
 533  518  {
 534      -/* CRYPT DELETE START */
 535  519          /* Initialize S-boxes and subkeys with Pi */
 536  520          Blowfish_initstate(c);
 537  521  
 538  522          /* Transform S-boxes and subkeys with key */
 539  523          Blowfish_expand0state(c, k, len);
 540      -/* CRYPT DELETE END */
 541  524  }
 542  525  
 543  526  void
 544  527  blf_enc(blf_ctx *c, uint32_t *data, uint16_t blocks)
 545  528  {
 546      -/* CRYPT DELETE START */
 547  529          uint32_t *d;
 548  530          uint16_t i;
 549  531  
 550  532          d = data;
 551  533          for (i = 0; i < blocks; i++) {
 552  534                  Blowfish_encipher(c, d, d + 1);
 553  535                  d += 2;
 554  536          }
 555      -/* CRYPT DELETE END */
 556  537  }
 557  538  
 558  539  void
 559  540  blf_dec(blf_ctx *c, uint32_t *data, uint16_t blocks)
 560  541  {
 561      -/* CRYPT DELETE START */
 562  542          uint32_t *d;
 563  543          uint16_t i;
 564  544  
 565  545          d = data;
 566  546          for (i = 0; i < blocks; i++) {
 567  547                  Blowfish_decipher(c, d, d + 1);
 568  548                  d += 2;
 569  549          }
 570      -/* CRYPT DELETE END */
 571  550  }
 572  551  
 573  552  void
 574  553  blf_ecb_encrypt(blf_ctx *c, uint8_t *data, uint32_t len)
 575  554  {
 576      -/* CRYPT DELETE START */
 577  555          uint32_t l, r;
 578  556          uint32_t i;
 579  557  
 580  558          for (i = 0; i < len; i += 8) {
 581  559                  l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
 582  560                  r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7];
 583  561                  Blowfish_encipher(c, &l, &r);
 584  562                  data[0] = l >> 24 & 0xff;
 585  563                  data[1] = l >> 16 & 0xff;
 586  564                  data[2] = l >> 8 & 0xff;
 587  565                  data[3] = l & 0xff;
 588  566                  data[4] = r >> 24 & 0xff;
 589  567                  data[5] = r >> 16 & 0xff;
 590  568                  data[6] = r >> 8 & 0xff;
 591  569                  data[7] = r & 0xff;
 592  570                  data += 8;
 593  571          }
 594      -/* CRYPT DELETE END */
 595  572  }
 596  573  
 597  574  void
 598  575  blf_ecb_decrypt(blf_ctx *c, uint8_t *data, uint32_t len)
 599  576  {
 600      -/* CRYPT DELETE START */
 601  577          uint32_t l, r;
 602  578          uint32_t i;
 603  579  
 604  580          for (i = 0; i < len; i += 8) {
 605  581                  l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
 606  582                  r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7];
 607  583                  Blowfish_decipher(c, &l, &r);
 608  584                  data[0] = l >> 24 & 0xff;
 609  585                  data[1] = l >> 16 & 0xff;
 610  586                  data[2] = l >> 8 & 0xff;
 611  587                  data[3] = l & 0xff;
 612  588                  data[4] = r >> 24 & 0xff;
 613  589                  data[5] = r >> 16 & 0xff;
 614  590                  data[6] = r >> 8 & 0xff;
 615  591                  data[7] = r & 0xff;
 616  592                  data += 8;
 617  593          }
 618      -/* CRYPT DELETE END */
 619  594  }
 620  595  
 621  596  void
 622  597  blf_cbc_encrypt(blf_ctx *c, uint8_t *iv, uint8_t *data, uint32_t len)
 623  598  {
 624      -/* CRYPT DELETE START */
 625  599          uint32_t l, r;
 626  600          uint32_t i, j;
 627  601  
 628  602          for (i = 0; i < len; i += 8) {
 629  603                  for (j = 0; j < 8; j++)
 630  604                          data[j] ^= iv[j];
 631  605                  l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
 632  606                  r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7];
 633  607                  Blowfish_encipher(c, &l, &r);
 634  608                  data[0] = l >> 24 & 0xff;
 635  609                  data[1] = l >> 16 & 0xff;
 636  610                  data[2] = l >> 8 & 0xff;
 637  611                  data[3] = l & 0xff;
 638  612                  data[4] = r >> 24 & 0xff;
 639  613                  data[5] = r >> 16 & 0xff;
 640  614                  data[6] = r >> 8 & 0xff;
 641  615                  data[7] = r & 0xff;
 642  616                  iv = data;
 643  617                  data += 8;
 644  618          }
 645      -/* CRYPT DELETE END */
 646  619  }
 647  620  
 648  621  void
 649  622  blf_cbc_decrypt(blf_ctx *c, uint8_t *iva, uint8_t *data, uint32_t len)
 650  623  {
 651      -/* CRYPT DELETE START */
 652  624          uint32_t l, r;
 653  625          uint8_t *iv;
 654  626          uint32_t i, j;
 655  627  
 656  628          iv = data + len - 16;
 657  629          data = data + len - 8;
 658  630          for (i = len - 8; i >= 8; i -= 8) {
 659  631                  l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
 660  632                  r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7];
 661  633                  Blowfish_decipher(c, &l, &r);
↓ open down ↓ 16 lines elided ↑ open up ↑
 678  650          data[0] = l >> 24 & 0xff;
 679  651          data[1] = l >> 16 & 0xff;
 680  652          data[2] = l >> 8 & 0xff;
 681  653          data[3] = l & 0xff;
 682  654          data[4] = r >> 24 & 0xff;
 683  655          data[5] = r >> 16 & 0xff;
 684  656          data[6] = r >> 8 & 0xff;
 685  657          data[7] = r & 0xff;
 686  658          for (j = 0; j < 8; j++)
 687  659                  data[j] ^= iva[j];
 688      -/* CRYPT DELETE END */
 689  660  }
 690  661  
 691      -/* CRYPT DELETE START */
 692  662  #if 0
 693  663  void
 694  664  report(uint32_t data[], uint16_t len)
 695  665  {
 696  666          uint16_t i;
 697  667          for (i = 0; i < len; i += 2)
 698  668                  printf("Block %0hd: %08lx %08lx.\n",
 699  669                      i / 2, data[i], data[i + 1]);
 700  670  }
 701  671  void
↓ open down ↓ 23 lines elided ↑ open up ↑
 725  695  
 726  696          /* Second test */
 727  697          blf_key(&c, (uint8_t *) key2, strlen(key2));
 728  698          blf_enc(&c, data2, 1);
 729  699          printf("\nShould read as: 0x324ed0fe 0xf413a203.\n");
 730  700          report(data2, 2);
 731  701          blf_dec(&c, data2, 1);
 732  702          report(data2, 2);
 733  703  }
 734  704  #endif
 735      -/* CRYPT DELETE END */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX