1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2025-11-11 11:08:02 -06:00

Crypto: Add support for 5 new cascades of cipher algorithms (Camellia-Kuznyechik, Camellia-Serpent, Kuznyechik-AES, Kuznyechik-Serpent-Camellia and Kuznyechik-Twofish)

This commit is contained in:
Mounir IDRASSI
2018-03-27 13:07:13 +02:00
parent da69304dc8
commit 7df9724e20
8 changed files with 406 additions and 6 deletions

View File

@@ -87,6 +87,11 @@ static EncryptionAlgorithm EncryptionAlgorithms[] =
{ { AES, SERPENT, 0 }, { XTS, 0 }, 1, 1 }, { { AES, SERPENT, 0 }, { XTS, 0 }, 1, 1 },
{ { AES, TWOFISH, SERPENT, 0 }, { XTS, 0 }, 1, 1 }, { { AES, TWOFISH, SERPENT, 0 }, { XTS, 0 }, 1, 1 },
{ { SERPENT, TWOFISH, 0 }, { XTS, 0 }, 1, 1 }, { { SERPENT, TWOFISH, 0 }, { XTS, 0 }, 1, 1 },
{ { KUZNYECHIK, CAMELLIA, 0 }, { XTS, 0 }, 0, 1 },
{ { TWOFISH, KUZNYECHIK, 0 }, { XTS, 0 }, 0, 1 },
{ { SERPENT, CAMELLIA, 0 }, { XTS, 0 }, 0, 1 },
{ { AES, KUZNYECHIK, 0 }, { XTS, 0 }, 0, 1 },
{ { CAMELLIA, SERPENT, KUZNYECHIK, 0 }, { XTS, 0 }, 0, 1 },
{ { 0, 0 }, { 0, 0}, 0, 0 } // Must be all-zero { { 0, 0 }, { 0, 0}, 0, 0 } // Must be all-zero
#else // TC_WINDOWS_BOOT #else // TC_WINDOWS_BOOT

View File

@@ -173,7 +173,7 @@ typedef struct
#ifdef TC_WINDOWS_BOOT #ifdef TC_WINDOWS_BOOT
#define MAX_EXPANDED_KEY VC_MAX((AES_KS + SERPENT_KS + TWOFISH_KS), CAMELLIA_KS) #define MAX_EXPANDED_KEY VC_MAX((AES_KS + SERPENT_KS + TWOFISH_KS), CAMELLIA_KS)
#else #else
#define MAX_EXPANDED_KEY VC_MAX(VC_MAX(VC_MAX((AES_KS + SERPENT_KS + TWOFISH_KS), GOST_KS), CAMELLIA_KS), KUZNYECHIK_KS) #define MAX_EXPANDED_KEY VC_MAX(VC_MAX(VC_MAX(VC_MAX((AES_KS + SERPENT_KS + TWOFISH_KS), GOST_KS), CAMELLIA_KS + KUZNYECHIK_KS + SERPENT_KS), KUZNYECHIK_KS + TWOFISH_KS), AES_KS + KUZNYECHIK_KS)
#endif #endif
#endif #endif

View File

@@ -1030,6 +1030,136 @@ BOOL TestSectorBufEncryption (PCRYPTO_INFO ci)
break; break;
} }
} }
else if (wcscmp (name, L"Camellia-Kuznyechik") == 0)
{
switch (testCase)
{
case 0:
if (crc != 0x4ea34e89)
return FALSE;
nTestsPerformed++;
break;
case 1:
if (crc != 0xb3ad8559)
return FALSE;
nTestsPerformed++;
break;
case 2:
if (crc != 0xde361313)
return FALSE;
nTestsPerformed++;
break;
case 3:
if (crc != 0x519d2bf9)
return FALSE;
nTestsPerformed++;
break;
}
}
else if (wcscmp (name, L"Kuznyechik-Twofish") == 0)
{
switch (testCase)
{
case 0:
if (crc != 0x748f8631)
return FALSE;
nTestsPerformed++;
break;
case 1:
if (crc != 0x8a4b0888)
return FALSE;
nTestsPerformed++;
break;
case 2:
if (crc != 0xe0310188)
return FALSE;
nTestsPerformed++;
break;
case 3:
if (crc != 0xfc2b6b45)
return FALSE;
nTestsPerformed++;
break;
}
}
else if (wcscmp (name, L"Camellia-Serpent") == 0)
{
switch (testCase)
{
case 0:
if (crc != 0x10569a42)
return FALSE;
nTestsPerformed++;
break;
case 1:
if (crc != 0x4de95152)
return FALSE;
nTestsPerformed++;
break;
case 2:
if (crc != 0xe17b5fe7)
return FALSE;
nTestsPerformed++;
break;
case 3:
if (crc != 0xdbf993fa)
return FALSE;
nTestsPerformed++;
break;
}
}
else if (wcscmp (name, L"Kuznyechik-AES") == 0)
{
switch (testCase)
{
case 0:
if (crc != 0xc479f95d)
return FALSE;
nTestsPerformed++;
break;
case 1:
if (crc != 0x58eaf88d)
return FALSE;
nTestsPerformed++;
break;
case 2:
if (crc != 0xbe300cc2)
return FALSE;
nTestsPerformed++;
break;
case 3:
if (crc != 0x9b681c2e)
return FALSE;
nTestsPerformed++;
break;
}
}
else if (wcscmp (name, L"Kuznyechik-Serpent-Camellia") == 0)
{
switch (testCase)
{
case 0:
if (crc != 0x9d8ac7ee)
return FALSE;
nTestsPerformed++;
break;
case 1:
if (crc != 0x5d7d347f)
return FALSE;
nTestsPerformed++;
break;
case 2:
if (crc != 0x884b62ee)
return FALSE;
nTestsPerformed++;
break;
case 3:
if (crc != 0x5c6c3997)
return FALSE;
nTestsPerformed++;
break;
}
}
if (crc == 0x9f5edd58) if (crc == 0x9f5edd58)
return FALSE; return FALSE;
@@ -1144,6 +1274,36 @@ BOOL TestSectorBufEncryption (PCRYPTO_INFO ci)
return FALSE; return FALSE;
nTestsPerformed++; nTestsPerformed++;
} }
else if (wcscmp (name, L"Camellia-Kuznyechik") == 0)
{
if (crc != 0xe69d680d)
return FALSE;
nTestsPerformed++;
}
else if (wcscmp (name, L"Kuznyechik-Twofish") == 0)
{
if (crc != 0xe0aef0d1)
return FALSE;
nTestsPerformed++;
}
else if (wcscmp (name, L"Camellia-Serpent") == 0)
{
if (crc != 0x58aad727)
return FALSE;
nTestsPerformed++;
}
else if (wcscmp (name, L"Kuznyechik-AES") == 0)
{
if (crc != 0x4641234a)
return FALSE;
nTestsPerformed++;
}
else if (wcscmp (name, L"Kuznyechik-Serpent-Camellia") == 0)
{
if (crc != 0x755dad72)
return FALSE;
nTestsPerformed++;
}
if (crc == 0x9f5edd58) if (crc == 0x9f5edd58)
return FALSE; return FALSE;
@@ -1156,9 +1316,9 @@ BOOL TestSectorBufEncryption (PCRYPTO_INFO ci)
nTestsPerformed++; nTestsPerformed++;
} }
#if defined(CIPHER_GOST89) #if defined(CIPHER_GOST89)
return (nTestsPerformed == 110); return (nTestsPerformed == 160);
#else #else
return (nTestsPerformed == 105); return (nTestsPerformed == 155);
#endif #endif
} }

View File

@@ -304,7 +304,11 @@ namespace VeraCrypt
{ {
bool xts = (typeid (*volume->GetEncryptionMode()) == typeid (EncryptionModeXTS)); bool xts = (typeid (*volume->GetEncryptionMode()) == typeid (EncryptionModeXTS));
bool algoNotSupported = (typeid (*volume->GetEncryptionAlgorithm()) == typeid (GOST89)) bool algoNotSupported = (typeid (*volume->GetEncryptionAlgorithm()) == typeid (GOST89))
|| (typeid (*volume->GetEncryptionAlgorithm()) == typeid (Kuznyechik)); || (typeid (*volume->GetEncryptionAlgorithm()) == typeid (Kuznyechik))
|| (typeid (*volume->GetEncryptionAlgorithm()) == typeid (CamelliaKuznyechik))
|| (typeid (*volume->GetEncryptionAlgorithm()) == typeid (KuznyechikTwofish))
|| (typeid (*volume->GetEncryptionAlgorithm()) == typeid (KuznyechikAES))
|| (typeid (*volume->GetEncryptionAlgorithm()) == typeid (KuznyechikSerpentCamellia));
if (options.NoKernelCrypto if (options.NoKernelCrypto
|| !xts || !xts

View File

@@ -69,6 +69,11 @@ namespace VeraCrypt
l.push_back (shared_ptr <EncryptionAlgorithm> (new Kuznyechik ())); l.push_back (shared_ptr <EncryptionAlgorithm> (new Kuznyechik ()));
l.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofish ())); l.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofish ()));
l.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofishSerpent ())); l.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofishSerpent ()));
l.push_back (shared_ptr <EncryptionAlgorithm> (new CamelliaKuznyechik ()));
l.push_back (shared_ptr <EncryptionAlgorithm> (new CamelliaSerpent ()));
l.push_back (shared_ptr <EncryptionAlgorithm> (new KuznyechikAES ()));
l.push_back (shared_ptr <EncryptionAlgorithm> (new KuznyechikSerpentCamellia ()));
l.push_back (shared_ptr <EncryptionAlgorithm> (new KuznyechikTwofish ()));
l.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentAES ())); l.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentAES ()));
l.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentTwofishAES ())); l.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentTwofishAES ()));
l.push_back (shared_ptr <EncryptionAlgorithm> (new TwofishSerpent ())); l.push_back (shared_ptr <EncryptionAlgorithm> (new TwofishSerpent ()));
@@ -314,4 +319,50 @@ namespace VeraCrypt
SupportedModes.push_back (shared_ptr <EncryptionMode> (new EncryptionModeXTS ())); SupportedModes.push_back (shared_ptr <EncryptionMode> (new EncryptionModeXTS ()));
} }
// Kuznyechik-Twofish
KuznyechikTwofish::KuznyechikTwofish ()
{
Ciphers.push_back (shared_ptr <Cipher> (new CipherTwofish ()));
Ciphers.push_back (shared_ptr <Cipher> (new CipherKuznyechik ()));
SupportedModes.push_back (shared_ptr <EncryptionMode> (new EncryptionModeXTS ()));
}
// Kuznyechik-AES
KuznyechikAES::KuznyechikAES ()
{
Ciphers.push_back (shared_ptr <Cipher> (new CipherAES ()));
Ciphers.push_back (shared_ptr <Cipher> (new CipherKuznyechik ()));
SupportedModes.push_back (shared_ptr <EncryptionMode> (new EncryptionModeXTS ()));
}
// Kuznyechik-Serpent-Camellia
KuznyechikSerpentCamellia::KuznyechikSerpentCamellia ()
{
Ciphers.push_back (shared_ptr <Cipher> (new CipherCamellia ()));
Ciphers.push_back (shared_ptr <Cipher> (new CipherSerpent ()));
Ciphers.push_back (shared_ptr <Cipher> (new CipherKuznyechik ()));
SupportedModes.push_back (shared_ptr <EncryptionMode> (new EncryptionModeXTS ()));
}
// Camellia-Kuznyechik
CamelliaKuznyechik::CamelliaKuznyechik ()
{
Ciphers.push_back (shared_ptr <Cipher> (new CipherKuznyechik ()));
Ciphers.push_back (shared_ptr <Cipher> (new CipherCamellia ()));
SupportedModes.push_back (shared_ptr <EncryptionMode> (new EncryptionModeXTS ()));
}
// Camellia-Serpent
CamelliaSerpent::CamelliaSerpent ()
{
Ciphers.push_back (shared_ptr <Cipher> (new CipherSerpent ()));
Ciphers.push_back (shared_ptr <Cipher> (new CipherCamellia ()));
SupportedModes.push_back (shared_ptr <EncryptionMode> (new EncryptionModeXTS ()));
}
} }

View File

@@ -88,6 +88,11 @@ namespace VeraCrypt
TC_ENCRYPTION_ALGORITHM (Camellia); TC_ENCRYPTION_ALGORITHM (Camellia);
TC_ENCRYPTION_ALGORITHM (GOST89); TC_ENCRYPTION_ALGORITHM (GOST89);
TC_ENCRYPTION_ALGORITHM (Kuznyechik); TC_ENCRYPTION_ALGORITHM (Kuznyechik);
TC_ENCRYPTION_ALGORITHM (KuznyechikTwofish);
TC_ENCRYPTION_ALGORITHM (KuznyechikAES);
TC_ENCRYPTION_ALGORITHM (KuznyechikSerpentCamellia);
TC_ENCRYPTION_ALGORITHM (CamelliaKuznyechik);
TC_ENCRYPTION_ALGORITHM (CamelliaSerpent);
#undef TC_ENCRYPTION_ALGORITHM #undef TC_ENCRYPTION_ALGORITHM
} }

View File

@@ -835,6 +835,136 @@ namespace VeraCrypt
break; break;
} }
} }
else if (typeid (ea) == typeid (CamelliaKuznyechik))
{
switch (testCase)
{
case 0:
if (crc != 0x4ea34e89)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 1:
if (crc != 0xb3ad8559)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 2:
if (crc != 0xde361313)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 3:
if (crc != 0x519d2bf9)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
}
}
else if (typeid (ea) == typeid (KuznyechikTwofish))
{
switch (testCase)
{
case 0:
if (crc != 0x748f8631)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 1:
if (crc != 0x8a4b0888)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 2:
if (crc != 0xe0310188)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 3:
if (crc != 0xfc2b6b45)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
}
}
else if (typeid (ea) == typeid (CamelliaSerpent))
{
switch (testCase)
{
case 0:
if (crc != 0x10569a42)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 1:
if (crc != 0x4de95152)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 2:
if (crc != 0xe17b5fe7)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 3:
if (crc != 0xdbf993fa)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
}
}
else if (typeid (ea) == typeid (KuznyechikAES))
{
switch (testCase)
{
case 0:
if (crc != 0xc479f95d)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 1:
if (crc != 0x58eaf88d)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 2:
if (crc != 0xbe300cc2)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 3:
if (crc != 0x9b681c2e)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
}
}
else if (typeid (ea) == typeid (KuznyechikSerpentCamellia))
{
switch (testCase)
{
case 0:
if (crc != 0x9d8ac7ee)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 1:
if (crc != 0x5d7d347f)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 2:
if (crc != 0x884b62ee)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
case 3:
if (crc != 0x5c6c3997)
throw TestFailed (SRC_POS);
nTestsPerformed++;
break;
}
}
if (crc == 0x9f5edd58) if (crc == 0x9f5edd58)
throw TestFailed (SRC_POS); throw TestFailed (SRC_POS);
@@ -949,6 +1079,36 @@ namespace VeraCrypt
throw TestFailed (SRC_POS); throw TestFailed (SRC_POS);
nTestsPerformed++; nTestsPerformed++;
} }
else if (typeid (ea) == typeid (CamelliaKuznyechik))
{
if (crc != 0xe69d680d)
throw TestFailed (SRC_POS);
nTestsPerformed++;
}
else if (typeid (ea) == typeid (KuznyechikTwofish))
{
if (crc != 0xe0aef0d1)
throw TestFailed (SRC_POS);
nTestsPerformed++;
}
else if (typeid (ea) == typeid (CamelliaSerpent))
{
if (crc != 0x58aad727)
throw TestFailed (SRC_POS);
nTestsPerformed++;
}
else if (typeid (ea) == typeid (KuznyechikAES))
{
if (crc != 0x4641234a)
throw TestFailed (SRC_POS);
nTestsPerformed++;
}
else if (typeid (ea) == typeid (KuznyechikSerpentCamellia))
{
if (crc != 0x755dad72)
throw TestFailed (SRC_POS);
nTestsPerformed++;
}
if (crc == 0x9f5edd58) if (crc == 0x9f5edd58)
throw TestFailed (SRC_POS); throw TestFailed (SRC_POS);
@@ -961,7 +1121,7 @@ namespace VeraCrypt
nTestsPerformed++; nTestsPerformed++;
} }
if (nTestsPerformed != 110) if (nTestsPerformed != 160)
throw TestFailed (SRC_POS); throw TestFailed (SRC_POS);
} }

View File

@@ -104,6 +104,11 @@ namespace VeraCrypt
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new Kuznyechik ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new Kuznyechik ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofish ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofish ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofishSerpent ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofishSerpent ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new CamelliaKuznyechik ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new CamelliaSerpent ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new KuznyechikAES ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new KuznyechikSerpentCamellia ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new KuznyechikTwofish ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentAES ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentAES ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentTwofishAES ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentTwofishAES ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new TwofishSerpent ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new TwofishSerpent ()));
@@ -145,6 +150,11 @@ namespace VeraCrypt
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new Kuznyechik ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new Kuznyechik ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofish ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofish ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofishSerpent ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofishSerpent ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new CamelliaKuznyechik ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new CamelliaSerpent ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new KuznyechikAES ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new KuznyechikSerpentCamellia ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new KuznyechikTwofish ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentAES ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentAES ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentTwofishAES ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentTwofishAES ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new TwofishSerpent ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new TwofishSerpent ()));
@@ -193,10 +203,15 @@ namespace VeraCrypt
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new Kuznyechik ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new Kuznyechik ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofish ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofish ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofishSerpent ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new AESTwofishSerpent ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new CamelliaKuznyechik ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new CamelliaSerpent ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new KuznyechikAES ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new KuznyechikSerpentCamellia ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new KuznyechikTwofish ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentAES ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentAES ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentTwofishAES ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new SerpentTwofishAES ()));
SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new TwofishSerpent ())); SupportedEncryptionAlgorithms.push_back (shared_ptr <EncryptionAlgorithm> (new TwofishSerpent ()));
SupportedEncryptionModes.push_back (shared_ptr <EncryptionMode> (new EncryptionModeXTS ())); SupportedEncryptionModes.push_back (shared_ptr <EncryptionMode> (new EncryptionModeXTS ()));
} }