diff --git a/License.txt b/License.txt index fc3f05469..b2db7832e 100644 --- a/License.txt +++ b/License.txt @@ -3,12 +3,7 @@ This copyright applies only to this software distribution package as a compilation, and does not imply a copyright on any particular file in the package. -The following files are copyrighted by their respective original authors, -and their use is subject to additional licenses included in these files. - -mars.cpp - Copyright 1998 Brian Gladman. - -All other files in this compilation are placed in the public domain by +All individual files in this compilation are placed in the public domain by Wei Dai and other contributors. I would like to thank the following authors for placing their works into diff --git a/Readme.txt b/Readme.txt index 861c036c6..178c5f7aa 100644 --- a/Readme.txt +++ b/Readme.txt @@ -1,5 +1,5 @@ Crypto++: a C++ Class Library of Cryptographic Schemes -Version 5.6.0 (3/15/2009) +Version 5.6.1 (in development) Crypto++ Library is a free C++ class library of cryptographic schemes. Currently the library contains the following algorithms: @@ -28,7 +28,7 @@ Currently the library contains the following algorithms: RIPEMD-256, RIPEMD-160, RIPEMD-320 RSA, DSA, ElGamal, Nyberg-Rueppel (NR), - public-key cryptography Rabin, Rabin-Williams (RW), LUC, LUCELG, + public-key cryptography Rabin-Williams (RW), LUC, LUCELG, DLIES (variants of DHAES), ESIGN padding schemes for public-key PKCS#1 v2.0, OAEP, PSS, PSSR, IEEE P1363 @@ -417,6 +417,7 @@ the mailing list. 5.6 - added AuthenticatedSymmetricCipher interface class and Filter wrappers - added CCM, GCM (with SSE2 assembly), EAX, CMAC, XSalsa20, and SEED - added support for variable length IVs + - added OIDs for Brainpool elliptic curve parameters - improved AES and SHA-256 speed on x86 and x64 - fixed incorrect VMAC computation on message lengths that are >64 mod 128 (x86 assembly version is not affected) @@ -425,5 +426,7 @@ the mailing list. - fixed HashFilter bug when putMessage=true - removed WORD64_AVAILABLE; compiler support for 64-bit int is now required - ported to GCC 4.3, C++Builder 2009, Sun CC 5.10, Intel C++ Compiler 11 + +5.6.1 - switched to a public domain implementation of MARS Written by Wei Dai diff --git a/TestVectors/all.txt b/TestVectors/all.txt index dcffeef72..3f06e78d0 100644 --- a/TestVectors/all.txt +++ b/TestVectors/all.txt @@ -26,3 +26,4 @@ Test: TestVectors/ccm.txt Test: TestVectors/gcm.txt Test: TestVectors/cmac.txt Test: TestVectors/eax.txt +Test: TestVectors/mars.txt diff --git a/TestVectors/mars.txt b/TestVectors/mars.txt new file mode 100644 index 000000000..3ed5a107e --- /dev/null +++ b/TestVectors/mars.txt @@ -0,0 +1,66 @@ +AlgorithmType: SymmetricCipher +Name: MARS/ECB +Key: 80000000000000000000000000000000 +Plaintext: 00000000000000000000000000000000 +Ciphertext: B3E2AD5608AC1B6733A7CB4FDF8F9952 +Test: Encrypt +Key: 00000000000000000000000000000000 +Plaintext: 00000000000000000000000000000000 +Ciphertext: DCC07B8DFB0738D6E30A22DFCF27E886 +Test: Encrypt +Key: 00000000000000000000000000000000 +Plaintext: DCC07B8DFB0738D6E30A22DFCF27E886 +Ciphertext: 33CAFFBDDC7F1DDA0F9C15FA2F30E2FF +Test: Encrypt +Key: CB14A1776ABBC1CDAFE7243DEF2CEA02 +Plaintext: F94512A9B42D034EC4792204D708A69B +Ciphertext: 225DA2CB64B73F79069F21A5E3CB8522 +Test: Encrypt +Key: 86EDF4DA31824CABEF6A4637C40B0BAB +Plaintext: 4DF955AD5B398D66408D620A2B27E1A9 +Ciphertext: A4B737340AE6D2CAFD930BA97D86129F +Test: Encrypt +Key: 000000000000000000000000000000000000000000000000 +Plaintext: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +Ciphertext: 97778747D60E425C2B4202599DB856FB +Test: Encrypt +Key: D158860838874D9500000000000000000000000000000000 +Plaintext: 93A953A82C10411DD158860838874D95 +Ciphertext: 4FA0E5F64893131712F01408D233E9F7 +Test: Encrypt +Key: 791739A58B04581A93A953A82C10411DD158860838874D95 +Plaintext: 6761C42D3E6142D2A84FBFADB383158F +Ciphertext: F706BC0FD97E28B6F1AF4E17D8755FFF +Test: Encrypt +Key: 0000000000000000000000000000000000000000000000000000000000000000 +Plaintext: 62E45B4CF3477F1DD65063729D9ABA8F +Ciphertext: 0F4B897EA014D21FBC20F1054A42F719 +Test: Encrypt +Key: FBA167983E7AEF22317CE28C02AAE1A3E8E5CC3CEDBEA82A99DBC39AD65E7227 +Plaintext: 1344ABA4D3C44708A8A72116D4F49384 +Ciphertext: 458335D95EA42A9F4DCCD41AECC2390D +Test: Encrypt +Key: 00000000000000000000000000000000 +Plaintext: 00000000000000000000000000000000 +Ciphertext: 3FE24DC09173D15F4616A849D396F7E3 +Test: EncryptionMCT +Key: 00000000000000000000000000000000 +Plaintext: 24BD3D2FC6FEE152D1D64545E2230584 +Ciphertext: 00000000000000000000000000000000 +Test: DecryptionMCT +Key: 000000000000000000000000000000000000000000000000 +Plaintext: 00000000000000000000000000000000 +Ciphertext: 34EC834E2F30741ECB476DA7E9662BBD +Test: EncryptionMCT +Key: 000000000000000000000000000000000000000000000000 +Plaintext: 7F27C3397A8CEEF1BDF859459690FEA8 +Ciphertext: 00000000000000000000000000000000 +Test: DecryptionMCT +Key: 0000000000000000000000000000000000000000000000000000000000000000 +Plaintext: 00000000000000000000000000000000 +Ciphertext: EDE145C10E279501D921C5E3B04420A6 +Test: EncryptionMCT +Key: 0000000000000000000000000000000000000000000000000000000000000000 +Plaintext: 95615ADB0DDF6613A5E84F849AC8C00D +Ciphertext: 00000000000000000000000000000000 +Test: DecryptionMCT diff --git a/cryptdll.vcproj b/cryptdll.vcproj index 5e7d7996a..a3ab06bac 100755 --- a/cryptdll.vcproj +++ b/cryptdll.vcproj @@ -68,6 +68,7 @@ EnableEnhancedInstructionSet="1" UsePrecompiledHeader="2" PrecompiledHeaderThrough="pch.h" + ProgramDataBaseFileName="$(OutDir)\vc80.pdb" WarningLevel="3" SuppressStartupBanner="true" DebugInformationFormat="3" @@ -167,6 +168,7 @@ EnableFunctionLevelLinking="true" UsePrecompiledHeader="2" PrecompiledHeaderThrough="pch.h" + ProgramDataBaseFileName="$(OutDir)\vc80.pdb" WarningLevel="3" SuppressStartupBanner="true" DebugInformationFormat="3" @@ -263,6 +265,7 @@ EnableEnhancedInstructionSet="1" UsePrecompiledHeader="2" PrecompiledHeaderThrough="pch.h" + ProgramDataBaseFileName="$(OutDir)\vc80.pdb" WarningLevel="3" SuppressStartupBanner="true" DebugInformationFormat="3" @@ -357,6 +360,7 @@ RuntimeLibrary="1" UsePrecompiledHeader="2" PrecompiledHeaderThrough="pch.h" + ProgramDataBaseFileName="$(OutDir)\vc80.pdb" WarningLevel="3" SuppressStartupBanner="true" DebugInformationFormat="3" diff --git a/cryptest.vcproj b/cryptest.vcproj index 1d39fcaaa..90abe31e9 100755 --- a/cryptest.vcproj +++ b/cryptest.vcproj @@ -780,6 +780,10 @@ RelativePath=".\TestVectors\hmac.txt" > + + diff --git a/cryptlib.vcproj b/cryptlib.vcproj index 210401ec4..9db32e6eb 100755 --- a/cryptlib.vcproj +++ b/cryptlib.vcproj @@ -55,6 +55,7 @@ EnableFunctionLevelLinking="true" UsePrecompiledHeader="2" PrecompiledHeaderThrough="pch.h" + ProgramDataBaseFileName="$(OutDir)\vc80.pdb" WarningLevel="3" SuppressStartupBanner="true" DebugInformationFormat="3" @@ -127,6 +128,7 @@ EnableFunctionLevelLinking="true" UsePrecompiledHeader="2" PrecompiledHeaderThrough="pch.h" + ProgramDataBaseFileName="$(OutDir)\vc80.pdb" WarningLevel="3" SuppressStartupBanner="true" DebugInformationFormat="3" @@ -199,6 +201,7 @@ EnableFunctionLevelLinking="true" UsePrecompiledHeader="2" PrecompiledHeaderThrough="pch.h" + ProgramDataBaseFileName="$(OutDir)\vc80.pdb" WarningLevel="3" SuppressStartupBanner="true" Detect64BitPortabilityProblems="true" @@ -273,6 +276,7 @@ EnableFunctionLevelLinking="true" UsePrecompiledHeader="2" PrecompiledHeaderThrough="pch.h" + ProgramDataBaseFileName="$(OutDir)\vc80.pdb" WarningLevel="3" SuppressStartupBanner="true" Detect64BitPortabilityProblems="true" @@ -341,6 +345,7 @@ EnableEnhancedInstructionSet="1" UsePrecompiledHeader="2" PrecompiledHeaderThrough="pch.h" + ProgramDataBaseFileName="$(OutDir)\vc80.pdb" WarningLevel="3" SuppressStartupBanner="true" DebugInformationFormat="4" @@ -408,6 +413,7 @@ RuntimeLibrary="1" UsePrecompiledHeader="2" PrecompiledHeaderThrough="pch.h" + ProgramDataBaseFileName="$(OutDir)\vc80.pdb" WarningLevel="3" SuppressStartupBanner="true" DebugInformationFormat="3" @@ -474,6 +480,7 @@ RuntimeLibrary="1" UsePrecompiledHeader="2" PrecompiledHeaderThrough="pch.h" + ProgramDataBaseFileName="$(OutDir)\vc80.pdb" WarningLevel="3" SuppressStartupBanner="true" Detect64BitPortabilityProblems="true" @@ -542,6 +549,7 @@ RuntimeLibrary="1" UsePrecompiledHeader="2" PrecompiledHeaderThrough="pch.h" + ProgramDataBaseFileName="$(OutDir)\vc80.pdb" WarningLevel="3" SuppressStartupBanner="true" Detect64BitPortabilityProblems="true" diff --git a/datatest.cpp b/datatest.cpp index d23d5d929..04b4e72b2 100644 --- a/datatest.cpp +++ b/datatest.cpp @@ -306,7 +306,7 @@ void TestSymmetricCipher(TestData &v, const NameValuePairs &overrideParameters) TestDataNameValuePairs testDataPairs(v); CombinedNameValuePairs pairs(overrideParameters, testDataPairs); - if (test == "Encrypt" || test == "EncryptXorDigest" || test == "Resync") + if (test == "Encrypt" || test == "EncryptXorDigest" || test == "Resync" || test == "EncryptionMCT" || test == "DecryptionMCT") { static member_ptr encryptor, decryptor; static std::string lastName; @@ -339,7 +339,46 @@ void TestSymmetricCipher(TestData &v, const NameValuePairs &overrideParameters) encryptor->Seek(seek); decryptor->Seek(seek); } + std::string encrypted, xorDigest, ciphertext, ciphertextXorDigest; + if (test == "EncryptionMCT" || test == "DecryptionMCT") + { + SymmetricCipher *cipher = encryptor.get(); + SecByteBlock buf((byte *)plaintext.data(), plaintext.size()), keybuf((byte *)key.data(), key.size()); + + if (test == "DecryptionMCT") + { + cipher = decryptor.get(); + ciphertext = GetDecodedDatum(v, "Ciphertext"); + buf.Assign((byte *)ciphertext.data(), ciphertext.size()); + } + + for (int i=0; i<400; i++) + { + encrypted.reserve(10000 * plaintext.size()); + for (int j=0; j<10000; j++) + { + cipher->ProcessString(buf.begin(), buf.size()); + encrypted.append((char *)buf.begin(), buf.size()); + } + + encrypted.erase(0, encrypted.size() - keybuf.size()); + xorbuf(keybuf.begin(), (const byte *)encrypted.data(), keybuf.size()); + cipher->SetKey(keybuf, keybuf.size()); + } + encrypted.assign((char *)buf.begin(), buf.size()); + ciphertext = GetDecodedDatum(v, test == "EncryptionMCT" ? "Ciphertext" : "Plaintext"); + if (encrypted != ciphertext) + { + std::cout << "incorrectly encrypted: "; + StringSource xx(encrypted, false, new HexEncoder(new FileSink(std::cout))); + xx.Pump(256); xx.Flush(false); + std::cout << "\n"; + SignalTestFailure(); + } + return; + } + StringSource ss(plaintext, false, new StreamTransformationFilter(*encryptor, new StringSink(encrypted), StreamTransformationFilter::NO_PADDING)); ss.Pump(plaintext.size()/2 + 1); ss.PumpAll(); diff --git a/ec2n.cpp b/ec2n.cpp index dbab31a98..b513b2cb8 100644 --- a/ec2n.cpp +++ b/ec2n.cpp @@ -20,7 +20,11 @@ EC2N::EC2N(BufferedTransformation &bt) m_field->BERDecodeElement(seq, m_b); // skip optional seed if (!seq.EndReached()) - BERDecodeOctetString(seq, TheBitBucket()); + { + SecByteBlock seed; + unsigned int unused; + BERDecodeBitString(seq, seed, unused); + } seq.MessageEnd(); } diff --git a/mars.cpp b/mars.cpp index 06811b533..fe9b1186a 100644 --- a/mars.cpp +++ b/mars.cpp @@ -1,18 +1,6 @@ -// mars.cpp - modified by Sean Woods from Brian Gladman's mars6.c for Crypto++ -// key setup updated by Wei Dai to reflect IBM's "tweak" proposed in August 1999 - -/* This is an independent implementation of the MARS encryption */ -/* algorithm designed by a team at IBM as a candidate for the US */ -/* NIST Advanced Encryption Standard (AES) effort. The algorithm */ -/* is subject to Patent action by IBM, who intend to offer royalty */ -/* free use if a Patent is granted. */ -/* */ -/* Copyright in this implementation is held by Dr B R Gladman but */ -/* I hereby give permission for its free direct or derivative use */ -/* subject to acknowledgment of its origin and compliance with any */ -/* constraints that IBM place on the use of the MARS algorithm. */ -/* */ -/* Dr Brian Gladman (gladman@seven77.demon.co.uk) 4th October 1998 */ +// mars.cpp - written and placed in the public domain by Wei Dai + +// includes IBM's key setup "tweak" proposed in August 1999 (http://www.research.ibm.com/security/key-setup.txt) #include "pch.h" #include "mars.h" @@ -20,24 +8,6 @@ NAMESPACE_BEGIN(CryptoPP) -ANONYMOUS_NAMESPACE_BEGIN -static word32 gen_mask(word32 x) -{ - word32 m; - - m = (~x ^ (x >> 1)) & 0x7fffffff; - m &= (m >> 1) & (m >> 2); m &= (m >> 3) & (m >> 6); - - if(!m) - return 0; - - m <<= 1; m |= (m << 1); m |= (m << 2); m |= (m << 4); - m |= (m << 1) & ~x & 0x80000000; - - return m & 0xfffffffc; -}; -NAMESPACE_END - void MARS::Base::UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs &) { AssertValidKeyLength(length); @@ -61,148 +31,122 @@ void MARS::Base::UncheckedSetKey(const byte *userKey, unsigned int length, const // Store next 10 key words into K[] for (i=0; i<10; i++) - EK[10*j+i] = T[4*i%15]; + m_k[10*j+i] = T[4*i%15]; } // Modify multiplication key-words for(unsigned int i = 5; i < 37; i += 2) { - word32 w = EK[i] | 3; - word32 m = gen_mask(w); - if(m) - w ^= (rotlMod(Sbox[265 + (EK[i] & 3)], EK[i-1]) & m); - EK[i] = w; + word32 m, w = m_k[i] | 3; + m = (~w ^ (w<<1)) & (~w ^ (w>>1)) & 0x7ffffffe; + m &= m>>1; m &= m>>2; m &= m>>4; + m |= m<<1; m |= m<<2; m |= m<<4; + m &= 0x7ffffffc; + w ^= rotlMod(Sbox[265 + (m_k[i] & 3)], m_k[i-1]) & m; + m_k[i] = w; } } -#define f_mix(a,b,c,d) \ - r = rotrFixed(a, 8); \ - b ^= Sbox[a & 255]; \ - b += Sbox[(r & 255) + 256]; \ - r = rotrFixed(a, 16); \ - a = rotrFixed(a, 24); \ - c += Sbox[r & 255]; \ - d ^= Sbox[(a & 255) + 256] - -#define b_mix(a,b,c,d) \ - r = rotlFixed(a, 8); \ - b ^= Sbox[(a & 255) + 256]; \ - c -= Sbox[r & 255]; \ - r = rotlFixed(a, 16); \ - a = rotlFixed(a, 24); \ - d -= Sbox[(r & 255) + 256]; \ - d ^= Sbox[a & 255] - -#define f_ktr(a,b,c,d,i) \ - m = a + EK[i]; \ - a = rotlFixed(a, 13); \ - r = a * EK[i + 1]; \ - l = Sbox[m & 511]; \ - r = rotlFixed(r, 5); \ - l ^= r; \ - c += rotlMod(m, r); \ - r = rotlFixed(r, 5); \ - l ^= r; \ - d ^= r; \ - b += rotlMod(l, r) - -#define r_ktr(a,b,c,d,i) \ - r = a * EK[i + 1]; \ - a = rotrFixed(a, 13); \ - m = a + EK[i]; \ - l = Sbox[m & 511]; \ - r = rotlFixed(r, 5); \ - l ^= r; \ - c -= rotlMod(m, r); \ - r = rotlFixed(r, 5); \ - l ^= r; \ - d ^= r; \ - b -= rotlMod(l, r) +#define S(a) Sbox[(a)&0x1ff] +#define S0(a) Sbox[(a)&0xff] +#define S1(a) Sbox[((a)&0xff) + 256] typedef BlockGetAndPut Block; void MARS::Enc::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const { - word32 a, b, c, d, l, m, r; + unsigned int i; + word32 a, b, c, d, l, m, r, t; + const word32 *k = m_k; Block::Get(inBlock)(a)(b)(c)(d); - a += EK[0]; - b += EK[1]; - c += EK[2]; - d += EK[3]; - - int i; - for (i = 0; i < 2; i++) { - f_mix(a,b,c,d); - a += d; - f_mix(b,c,d,a); - b += c; - f_mix(c,d,a,b); - f_mix(d,a,b,c); + a += k[0]; b += k[1]; c += k[2]; d += k[3]; + + for (i=0; i<8; i++) + { + b = (b ^ S0(a)) + S1(a>>8); + c += S0(a>>16); + a = rotrFixed(a, 24); + d ^= S1(a); + a += (i%4==0) ? d : 0; + a += (i%4==1) ? b : 0; + t = a; a = b; b = c; c = d; d = t; + } + + for (i=0; i<16; i++) + { + t = rotlFixed(a, 13); + r = rotlFixed(t * k[2*i+5], 10); + m = a + k[2*i+4]; + l = rotlMod((S(m) ^ rotrFixed(r, 5) ^ r), r); + c += rotlMod(m, rotrFixed(r, 5)); + (i<8 ? b : d) += l; + (i<8 ? d : b) ^= r; + a = b; b = c; c = d; d = t; } - f_ktr(a,b,c,d, 4); f_ktr(b,c,d,a, 6); f_ktr(c,d,a,b, 8); f_ktr(d,a,b,c,10); - f_ktr(a,b,c,d,12); f_ktr(b,c,d,a,14); f_ktr(c,d,a,b,16); f_ktr(d,a,b,c,18); - f_ktr(a,d,c,b,20); f_ktr(b,a,d,c,22); f_ktr(c,b,a,d,24); f_ktr(d,c,b,a,26); - f_ktr(a,d,c,b,28); f_ktr(b,a,d,c,30); f_ktr(c,b,a,d,32); f_ktr(d,c,b,a,34); - - for (i = 0; i < 2; i++) { - b_mix(a,b,c,d); - b_mix(b,c,d,a); - c -= b; - b_mix(c,d,a,b); - d -= a; - b_mix(d,a,b,c); + for (i=0; i<8; i++) + { + a -= (i%4==2) ? d : 0; + a -= (i%4==3) ? b : 0; + b ^= S1(a); + c -= S0(a>>24); + t = rotlFixed(a, 24); + d = (d - S1(a>>16)) ^ S0(t); + a = b; b = c; c = d; d = t; } - a -= EK[36]; - b -= EK[37]; - c -= EK[38]; - d -= EK[39]; + a -= k[36]; b -= k[37]; c -= k[38]; d -= k[39]; Block::Put(xorBlock, outBlock)(a)(b)(c)(d); } void MARS::Dec::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const { - word32 a, b, c, d, l, m, r; + unsigned int i; + word32 a, b, c, d, l, m, r, t; + const word32 *k = m_k; Block::Get(inBlock)(d)(c)(b)(a); - d += EK[36]; - c += EK[37]; - b += EK[38]; - a += EK[39]; - - int i; - for (i = 0; i < 2; i++) { - f_mix(a,b,c,d); - a += d; - f_mix(b,c,d,a); - b += c; - f_mix(c,d,a,b); - f_mix(d,a,b,c); + d += k[36]; c += k[37]; b += k[38]; a += k[39]; + + for (i=0; i<8; i++) + { + b = (b ^ S0(a)) + S1(a>>8); + c += S0(a>>16); + a = rotrFixed(a, 24); + d ^= S1(a); + a += (i%4==0) ? d : 0; + a += (i%4==1) ? b : 0; + t = a; a = b; b = c; c = d; d = t; } - r_ktr(a,b,c,d,34); r_ktr(b,c,d,a,32); r_ktr(c,d,a,b,30); r_ktr(d,a,b,c,28); - r_ktr(a,b,c,d,26); r_ktr(b,c,d,a,24); r_ktr(c,d,a,b,22); r_ktr(d,a,b,c,20); - r_ktr(a,d,c,b,18); r_ktr(b,a,d,c,16); r_ktr(c,b,a,d,14); r_ktr(d,c,b,a,12); - r_ktr(a,d,c,b,10); r_ktr(b,a,d,c, 8); r_ktr(c,b,a,d, 6); r_ktr(d,c,b,a, 4); - - for (i = 0; i < 2; i++) { - b_mix(a,b,c,d); - b_mix(b,c,d,a); - c -= b; - b_mix(c,d,a,b); - d -= a; - b_mix(d,a,b,c); + for (i=0; i<16; i++) + { + t = rotrFixed(a, 13); + r = rotlFixed(a * k[35-2*i], 10); + m = t + k[34-2*i]; + l = rotlMod((S(m) ^ rotrFixed(r, 5) ^ r), r); + c -= rotlMod(m, rotrFixed(r, 5)); + (i<8 ? b : d) -= l; + (i<8 ? d : b) ^= r; + a = b; b = c; c = d; d = t; + } + + for (i=0; i<8; i++) + { + a -= (i%4==2) ? d : 0; + a -= (i%4==3) ? b : 0; + b ^= S1(a); + c -= S0(a>>24); + t = rotlFixed(a, 24); + d = (d - S1(a>>16)) ^ S0(t); + a = b; b = c; c = d; d = t; } - d -= EK[0]; - c -= EK[1]; - b -= EK[2]; - a -= EK[3]; + d -= k[0]; c -= k[1]; b -= k[2]; a -= k[3]; Block::Put(xorBlock, outBlock)(d)(c)(b)(a); } diff --git a/mars.h b/mars.h index ad0cd36bf..414adf42d 100644 --- a/mars.h +++ b/mars.h @@ -26,7 +26,7 @@ class MARS : public MARS_Info, public BlockCipherDocumentation protected: static const word32 Sbox[512]; - FixedSizeSecBlock EK; + FixedSizeSecBlock m_k; }; class CRYPTOPP_NO_VTABLE Enc : public Base diff --git a/regtest.cpp b/regtest.cpp index 3887e8478..33c2f6d79 100644 --- a/regtest.cpp +++ b/regtest.cpp @@ -120,6 +120,7 @@ void RegisterFactories() RegisterSymmetricCipherDefaultFactories >(); RegisterSymmetricCipherDefaultFactories >(); RegisterSymmetricCipherDefaultFactories >(); + RegisterSymmetricCipherDefaultFactories >(); RegisterSymmetricCipherDefaultFactories >(); RegisterSymmetricCipherDefaultFactories >(); RegisterSymmetricCipherDefaultFactories >();