Changeset 1201


Ignore:
Timestamp:
Feb 26, 2010, 3:36:11 PM (12 years ago)
Author:
Sven Rech
Message:

fixed CFB

Location:
trunk/NativeCryptography
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/NativeCryptography/NativeCryptography.cpp

    r1198 r1201  
    4747        array<unsigned char>^ Crypto::decryptAESorDES(array<unsigned char>^ Input, array<unsigned char>^ Key, array<unsigned char>^ IV, const int bits, const int length, const int mode, const int blockSize, const cryptMethod method)
    4848        {
    49                 static unsigned char lastIVencrypted[16];       //optimization
    50 
    5149                int numBlocks = length / blockSize;
    5250                if (length % blockSize != 0)
     
    7169
    7270                array<unsigned char>^ output = gcnew array<unsigned char>(length);
    73                 pin_ptr<unsigned char> outp = &output[0];       
     71                pin_ptr<unsigned char> outp = &output[0];
    7472
    7573                AES_KEY aeskey;
     
    9492                        else
    9593                                return nullptr;
    96 
     94                       
    9795                        if (method == cryptMethod::methodAES)
    9896                                AES_set_encrypt_key(key, bits, &aeskey);
    9997                        else
    10098                                DES_set_key_unchecked((const_DES_cblock*)key, &deskey);
    101                        
    102                         if (IV != lastIV)
    103                         {
    104                                 try{
    105                                         lastivmutex->WaitOne();
    106                                         if (IV != lastIV)
    107                                         {
    108                                                 encrypt(iv, lastIVencrypted, method, &aeskey, &deskey);
    109                                                 lastIV = IV;
    110                                         }
    111                                 } finally
    112                                 {
    113                                         lastivmutex->ReleaseMutex();
    114                                 }
    115                         }
    116                        
    117                         unsigned char leftmost = lastIVencrypted[0];
     99
     100                        encrypt(iv, block, method, &aeskey, &deskey);
     101                        unsigned char leftmost = block[0];
    118102                        outp[0] = leftmost ^ input[0];
    119103
  • trunk/NativeCryptography/NativeCryptography.h

    r1198 r1201  
    1414                enum class cryptMethod {methodAES, methodDES};
    1515
    16                 //for optimization:
    17                 static array<unsigned char>^ lastIV = nullptr;         
    1816                static array<unsigned char>^ zeroIV8 = gcnew array<unsigned char>(8);
    1917                static array<unsigned char>^ zeroIV16 = gcnew array<unsigned char>(16);
    20                 static Mutex^ lastivmutex = gcnew Mutex();
    2118
    2219                static void xorBlockAES(int *t1, int *t2);
Note: See TracChangeset for help on using the changeset viewer.