Changeset 1197


Ignore:
Timestamp:
Feb 26, 2010, 3:03:33 AM (12 years ago)
Author:
Sven Rech
Message:

implemented CFB properly

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NativeCryptography/NativeCryptography.cpp

    r1196 r1197  
    6565                if (mode == 2)  //CFB
    6666                {
     67                        array<unsigned char>^ ShiftRegister = (array<unsigned char>^)IV->Clone();
     68                        pin_ptr<unsigned char> shiftregister = &ShiftRegister[0];                       
     69                        unsigned char block[16];        //16 is enough for AES and DES
     70
    6771                        if (method == cryptMethod::methodAES)
    6872                                AES_set_encrypt_key(key, bits, &aeskey);
     
    7074                                DES_set_key_unchecked((const_DES_cblock*)key, &deskey);
    7175
    72                         encrypt(iv, outp, method, &aeskey, &deskey);
    73                         xorblock(outp, input, method);
    74 
    75                         for (int c = 0; c < numBlocks-1; c++)
     76                        for (int i = 0; i < length; i++)
    7677                        {
    77                                 encrypt(input+c*blockSize, outp+(c+1)*blockSize, method, &aeskey, &deskey);                                     
    78                                 xorblock(outp+(c+1)*blockSize, input+(c+1)*blockSize, method);
     78                                encrypt(shiftregister, block, method, &aeskey, &deskey);
     79                                unsigned char leftmost = block[0];
     80                                outp[i] = leftmost ^ input[i];
     81                               
     82                                //shift input[i] in register:
     83                                for (int c = 0; c < blockSize - 1; c++)
     84                                        shiftregister[c] = shiftregister[c+1];
     85                                shiftregister[blockSize-1] = input[i];
    7986                        }
    8087                }
Note: See TracChangeset for help on using the changeset viewer.