source: trunk/NativeCryptography/NativeCryptography.h @ 1198

Last change on this file since 1198 was 1198, checked in by Sven Rech, 12 years ago

speed optimization for CFB

File size: 1.8 KB
Line 
1#pragma once
2#include "aes_core.h"
3#include "DES/des.h"
4#include <stdlib.h>
5
6using namespace System::Threading;
7using namespace System;
8
9namespace NativeCryptography {
10
11        public ref class Crypto
12        {
13        private:
14                enum class cryptMethod {methodAES, methodDES};
15
16                //for optimization:
17                static array<unsigned char>^ lastIV = nullptr;         
18                static array<unsigned char>^ zeroIV8 = gcnew array<unsigned char>(8);
19                static array<unsigned char>^ zeroIV16 = gcnew array<unsigned char>(16);
20                static Mutex^ lastivmutex = gcnew Mutex();
21
22                static void xorBlockAES(int *t1, int *t2);
23                static void xorBlockDES(int *t1, int *t2);
24                static void encrypt(unsigned char* in, unsigned char* out, const cryptMethod method, AES_KEY* aeskey, DES_key_schedule* deskey);
25                static void decrypt(unsigned char* in, unsigned char* out, const cryptMethod method, AES_KEY* aeskey, DES_key_schedule* deskey);
26                static void xorblock(unsigned char* t1, unsigned char* t2, const cryptMethod method);
27                static array<unsigned char>^ 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);
28
29        public:
30                static array<unsigned char>^ decryptAES(array<unsigned char>^ Input, array<unsigned char>^ Key, array<unsigned char>^ IV, const int bits, const int length, const int mode)
31                {
32                        const int blockSize = 16;
33                        return decryptAESorDES(Input, Key, IV, bits, length, mode, blockSize, cryptMethod::methodAES);
34                }
35
36                static array<unsigned char>^ decryptDES(array<unsigned char>^ Input, array<unsigned char>^ Key, array<unsigned char>^ IV, const int length, const int mode)
37                {
38                        const int blockSize = 8;
39                        return decryptAESorDES(Input, Key, IV, 0, length, mode, blockSize, cryptMethod::methodDES);
40                }
41        };
42}
Note: See TracBrowser for help on using the repository browser.