Merge remote-tracking branch 'upstream/master'
authorJean-Michel Perraud <jean-michel.perraud@csiro.au>
Wed, 9 Jan 2013 23:53:17 +0000 (10:53 +1100)
committerJean-Michel Perraud <jean-michel.perraud@csiro.au>
Wed, 9 Jan 2013 23:53:17 +0000 (10:53 +1100)
71 files changed:
autogen.sh
configure.in
eglib/autogen.sh
eglib/configure.ac
external/rx
libgc/autogen.sh
mcs/build/profiles/monodroid.make
mcs/class/Makefile
mcs/class/Mono.Security/Mono.Security.Authenticode/AuthenticodeDeformatter.cs
mcs/class/System.Core/System.Core.dll.sources
mcs/class/System.Core/System.Security.Cryptography/Aes.cs
mcs/class/System.Data.Services.Client/monodroid_System.Data.Services.Client.dll.sources
mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs
mcs/class/System.XML/Test/System.Xml.Serialization/DeserializeTests.cs
mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializerTestClasses.cs
mcs/class/System/Assembly/AssemblyInfo.cs
mcs/class/System/System.Net/WebClient.cs
mcs/class/corlib/Mono.Security.Cryptography/SymmetricTransform.cs
mcs/class/corlib/System.Security.Cryptography/RijndaelManagedTransform.cs
mcs/class/corlib/System.Security.Cryptography/SymmetricAlgorithm.cs
mcs/class/corlib/System.Threading/SynchronizationContext.cs
mcs/class/corlib/System.Threading/Timer.cs
mcs/class/corlib/System/Array.cs
mcs/class/corlib/System/Environment.cs
mcs/class/corlib/System/IAppDomainSetup.cs
mcs/class/corlib/Test/System.Security.Cryptography/AesCfbTest.cs [new file with mode: 0644]
mcs/class/corlib/Test/System.Security.Cryptography/CfbTest.cs [new file with mode: 0644]
mcs/class/corlib/Test/System.Security.Cryptography/DesCfbTest.cs [new file with mode: 0644]
mcs/class/corlib/Test/System.Security.Cryptography/Rc2CfbTest.cs [new file with mode: 0644]
mcs/class/corlib/Test/System.Security.Cryptography/RijndaelCfbTest.cs [new file with mode: 0644]
mcs/class/corlib/Test/System.Security.Cryptography/RijndaelManagedTest.cs
mcs/class/corlib/Test/System.Security.Cryptography/RijndaelTest.cs
mcs/class/corlib/Test/System.Security.Cryptography/TripleDesCfbTest.cs [new file with mode: 0644]
mcs/class/corlib/corlib_test.dll.sources
mcs/errors/cs0579-13.cs [new file with mode: 0644]
mcs/errors/cs1501-14.cs [new file with mode: 0644]
mcs/mcs/attribute.cs
mcs/mcs/constant.cs
mcs/mcs/ecore.cs
mcs/mcs/import.cs
mcs/mcs/nullable.cs
mcs/mcs/parameter.cs
mcs/tests/gtest-284.cs
mcs/tests/gtest-optional-27.cs [new file with mode: 0644]
mcs/tests/known-issues-mt
mcs/tests/test-860.cs [new file with mode: 0644]
mcs/tests/test-com-02-lib.il
mcs/tests/test-com-03-lib.il
mcs/tests/test-com-03.cs
mcs/tests/ver-il-net_4_5.xml
mono/io-layer/locking.c
mono/metadata/appdomain.c
mono/metadata/class-internals.h
mono/metadata/class.c
mono/metadata/domain.c
mono/metadata/loader.c
mono/metadata/sgen-cardtable.c
mono/metadata/sgen-gc.c
mono/metadata/sgen-gc.h
mono/metadata/sgen-major-scan-object.h
mono/metadata/sgen-minor-copy-object.h
mono/metadata/sgen-minor-scan-object.h
mono/metadata/sgen-ssb.c
mono/mini/cpu-arm.md
mono/mini/debugger-agent.c
mono/mini/generics.cs
mono/mini/mini-arm.c
mono/profiler/proflog.c
mono/utils/mono-error-internals.h
mono/utils/mono-error.c
runtime/Makefile.am

index ad24da8e13b1b5935379723f6a35cbd2f39d7521..3a51ad424c8e6efb91e74fe08f085fce547af8a2 100755 (executable)
@@ -134,7 +134,7 @@ aclocal -Wnone -I m4 -I . $ACLOCAL_FLAGS || {
   exit 1
 }
 
-if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then
+if grep "^AC_CONFIG_HEADERS" configure.in >/dev/null; then
   echo "Running autoheader..."
   autoheader || { echo "**Error**: autoheader failed."; exit 1; }
 fi
index be5cbb2477580bff51b0a829a397c33008c1db12..0c4f080b754bcd56cb3e162a09a42888946e7ee8 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autoconf to produce a configure script.
 #AC_PREREQ([2.62])
 
-AC_INIT(mono, [3.0.3],
+AC_INIT(mono, [3.0.4],
         [http://bugzilla.xamarin.com/enter_bug.cgi?classification=Mono])
 
 AC_CONFIG_SRCDIR([README])
@@ -14,7 +14,7 @@ AC_CANONICAL_HOST
 m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
 
 AM_INIT_AUTOMAKE([1.9 dist-bzip2 tar-ustar no-dist-gzip foreign])
-AM_CONFIG_HEADER([config.h])
+AC_CONFIG_HEADERS([config.h])
 AM_MAINTAINER_MODE
 
 API_VER=2.0
@@ -362,7 +362,6 @@ AC_PROG_CC
 AC_CHECK_TOOL(CXX, g++, g++)
 AC_PROG_CXX
 AM_PROG_AS
-AM_PROG_CC_STDC
 AC_PROG_INSTALL
 AC_PROG_AWK
 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
index ac2e767902196c4e9a3f6c1b8de120e156dfaa2c..66f980a9b18938dc8f79ccb3578dbc1627b880a2 100755 (executable)
@@ -113,7 +113,7 @@ aclocal -I m4 $ACLOCAL_FLAGS || {
   exit 1
 }
 
-if grep "^AM_CONFIG_HEADER" configure.ac >/dev/null; then
+if grep "^AC_CONFIG_HEADERS" configure.ac >/dev/null; then
   echo "Running autoheader..."
   autoheader || { echo "**Error**: autoheader failed."; exit 1; }
 fi
index d3e528d55b1843fd4eba41c5512a338fcee6b372..dfe9ec4856d4aa02c27427fdbf8ac130f67ad7ab 100644 (file)
@@ -10,7 +10,7 @@ AC_CANONICAL_SYSTEM
 AC_CANONICAL_HOST
 
 AM_INIT_AUTOMAKE([1.9 dist-bzip2 tar-ustar no-dist-gzip foreign])
-AM_CONFIG_HEADER([config.h])
+AC_CONFIG_HEADERS([config.h])
 AM_MAINTAINER_MODE
 
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
index 19b63bd722ba1fe86e25e1d9991490447d37b121..8dee06db27b04779be20f10b9950cb225df146b3 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 19b63bd722ba1fe86e25e1d9991490447d37b121
+Subproject commit 8dee06db27b04779be20f10b9950cb225df146b3
index 4cfc38728ee74a080205c7574d13d6953f32824b..376c387885677ce108f2841a1faa8061a235fa29 100755 (executable)
@@ -99,7 +99,7 @@ aclocal $ACLOCAL_FLAGS || {
   exit 1
 }
 
-if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then
+if grep "^AC_CONFIG_HEADERS" configure.in >/dev/null; then
   echo "Running autoheader..."
   autoheader || { echo "**Error**: autoheader failed."; exit 1; }
 fi
index a27eec3ab32627a4538aee3274ead35ade3d1edc..c3394bc39e123b7c94abe318c74f0072caead854 100644 (file)
@@ -9,7 +9,7 @@ profile-check:
        @:
 
 DEFAULT_REFERENCES = -r:mscorlib.dll
-PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_2_1 -d:MOBILE -d:MONODROID -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) $(DEFAULT_REFERENCES) $(PLATFORM_DEBUG_FLAGS)
+PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_2_1 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MOBILE -d:MONODROID -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) $(DEFAULT_REFERENCES) $(PLATFORM_DEBUG_FLAGS)
 FRAMEWORK_VERSION = 2.1
 NO_TEST = yes
 
index 59e8d219c28fdcef701760b9f1806e988235bfec..509c4fc414eb89ead46d8e56a550c5e9883fff42 100644 (file)
@@ -166,7 +166,8 @@ mobile_dirs := \
        System.Reactive.Linq \
        System.Reactive.PlatformServices \
        System.Reactive.Experimental \
-       System.Reactive.Debugger
+       System.Reactive.Debugger        \
+       System.Net.Http
 
 monodroid_dirs := \
        Mono.CompilerServices.SymbolWriter      \
@@ -201,7 +202,8 @@ monotouch_runtime_dirs := \
        System.Web \
        Mono.Web \
        System.Web.Services \
-       System.Web
+       System.Web      \
+       System.Net.Http
 
 net_3_5_only_dirs := \
        Microsoft.Build.Framework       \
index a92affc4e549f169a97632f952654b38da513670..cc74cca20ae732e538fccdb688d34957040c4374 100644 (file)
@@ -351,7 +351,7 @@ namespace Mono.Security.Authenticode {
                {
                        // SEQUENCE {
                        //   INTEGER 1
-                       if (cs.Version != 1)
+                       if (cs.Version > 1)
                                return false;
                        //   SEQUENCE {
                        //      SEQUENCE {
index ebb49b3d99a54ead69fdcee72f28a40a869c0431..8f7b67fec888c3674c17cdf6a80ea6b3801492a9 100644 (file)
@@ -1,3 +1,4 @@
+../../build/common/Consts.cs
 Assembly/AssemblyInfo.cs
 System/Actions.cs
 System/Funcs.cs
index b047956562439bd8f57839dc64a921af3498ef32..061bd617d903f47896c956aa88e0a93c7b44da63 100644 (file)
@@ -60,12 +60,8 @@ namespace System.Security.Cryptography {
                        // The Aes base class was moved from System.Core to mscorlib - so we can't just return a new AesCryptoServiceProvider instance\r
                        // note: the linker is aware of this condition\r
                        return (Aes) Activator.CreateInstance (Type.GetType ("System.Security.Cryptography.AesManaged, " + Consts.AssemblySystem_Core));\r
-#elif MOBILE\r
-                       // there was a mixup in the MOBILE profile, to be compatible with Silverlight it's\r
-                       // AesManaged that should have been provided, not AesCryptoServiceProvider\r
-                       return Create ("System.Security.Cryptography.AesCryptoServiceProvider, " + Consts.AssemblySystem_Core);\r
 #else\r
-                       return Create ("System.Security.Cryptography.AesManaged, " + Consts.AssemblySystem_Core);\r
+                       return Create ("System.Security.Cryptography.AesCryptoServiceProvider, " + Consts.AssemblySystem_Core);\r
 #endif\r
                }\r
 \r
index 5ad9459d88a2c1a21c93891ab1fec23f77267393..37dc2990c8d1d24845da0ddfc69531c220374a84 100644 (file)
@@ -1,2 +1 @@
-#include System.Data.Services.Client.dll.sources
-./Client/AssemblyAttributes.cs
+#include net_4_5_System.Data.Services.Client.dll.sources
index 58b1a3a4e44716db8571f18b8916a248c433a62f..c93325c2391c421eb4c0cf54ff1424ef35a93ffe 100644 (file)
@@ -400,6 +400,10 @@ namespace System.Xml.Serialization
                                                if (info.Member != previousMember)
                                                {
                                                        ind = info.ExplicitOrder + 1;
+                                                       // If the member is a flat list don't increase the index, since the next element may
+                                                       // be another item of the list. This is a fix for Xamarin bug #9193.
+                                                       if (info.Member is XmlTypeMapMemberFlatList)
+                                                               ind--;
                                                        previousMember = info.Member;
                                                }
 
index 362d61fbcf7f260015744fae20312ef274242da6..daadbdf3fa2e3c9ee102ed4268213a4ac398c859 100644 (file)
@@ -1664,5 +1664,20 @@ namespace MonoTests.System.XmlSerialization
                        Assert.AreEqual ("BaseValue", res6.Base);
                        Assert.AreEqual ("MidValue", res6.Mid); 
                }
+               
+               [Test] // bug #9193
+               public void TestOrderedMapWithFlatList ()
+               {
+                       var d = (Bug9193Class) Deserialize (typeof(Bug9193Class), "<Test><Data>One</Data><Data>Two</Data><Data>Three</Data><Extra>a</Extra><Extra>b</Extra></Test>");
+                       Assert.IsNotNull (d);
+                       Assert.AreEqual (3, d.Data.Length);
+                       Assert.AreEqual ("One", d.Data[0]);
+                       Assert.AreEqual ("Two", d.Data[1]);
+                       Assert.AreEqual ("Three", d.Data[2]);
+
+                       Assert.AreEqual (2, d.Extra.Length);
+                       Assert.AreEqual ("a", d.Extra[0]);
+                       Assert.AreEqual ("b", d.Extra[1]);
+               }
        }
 }
index 006202d5860953f26af003dddd1a8c2a6859dc9b..1526259184397866914603c0375da2706bb9bea4 100644 (file)
@@ -1094,5 +1094,14 @@ namespace MonoTests.System.Xml.TestClasses
        public class Bug8468SubclassNoNamespaceV2: Bug8468MidClassV2
        {
        }
+       
+       [XmlRoot("Test")]
+       public class Bug9193Class
+       {
+               [XmlElement ("Data", Order=0)]
+               public string[] Data;
+               [XmlElement ("Extra", Order=1)]
+               public string[] Extra;
+       }
 }
 
index a565b594ac3e93a2465b749adc11a3b0c2d3db5f..bdaba29fd4813280ddd5566baa07f1faee85222a 100644 (file)
@@ -69,7 +69,7 @@ using System.Runtime.InteropServices;
 #endif
 #endif
 
-#if NET_2_1
+#if NET_2_1 && !MOBILE
        [assembly: InternalsVisibleTo ("System.Net, PublicKey=00240000048000009400000006020000002400005253413100040000010001008D56C76F9E8649383049F383C44BE0EC204181822A6C31CF5EB7EF486944D032188EA1D3920763712CCB12D75FB77E9811149E6148E5D32FBAAB37611C1878DDC19E20EF135D0CB2CFF2BFEC3D115810C3D9069638FE4BE215DBF795861920E5AB6F7DB2E2CEEF136AC23D5DD2BF031700AEC232F6C6B1C785B4305C123B37AB")]
 #else
        [assembly: InternalsVisibleTo ("System.ComponentModel.DataAnnotations, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")]
index 7e200a02bd8f02ef08e14c98571ecd326f54cf6d..4e1993f7e585c46c19b3ef53edb7beb4b6da6622 100644 (file)
@@ -1526,9 +1526,11 @@ namespace System.Net
                        try {
                                SetBusy ();
                                cts = new CancellationTokenSource ();
-                               request = await SetupRequestAsync (address).ConfigureAwait (false);
-                               response = await GetWebResponseTaskAsync (request, cts.Token).ConfigureAwait (false);
-                               var result = await ReadAllTaskAsync (request, response, cts.Token).ConfigureAwait (false);
+                               request = await SetupRequestAsync (address);
+                               response = await GetWebResponseTaskAsync (request, cts.Token);
+                               var result = await ReadAllTaskAsync (request, response, cts.Token);
+
+                               // Has to run on original context
                                OnDownloadDataCompleted (new DownloadDataCompletedEventArgs (result, null, false, null));
                                return result;
                        } catch (WebException ex) {
@@ -1593,7 +1595,7 @@ namespace System.Net
                        int offset = 0;
                        byte [] buffer = new byte [size];
                        token.ThrowIfCancellationRequested ();
-                       while ((nread = await stream.ReadAsync (buffer, offset, size, token).ConfigureAwait (false)) != 0) {
+                       while ((nread = await stream.ReadAsync (buffer, offset, size, token)) != 0) {
                                if (nolength) {
                                        ms.Write (buffer, 0, nread);
                                } else {
@@ -1631,9 +1633,9 @@ namespace System.Net
                        try {
                                SetBusy ();
                                cts = new CancellationTokenSource ();
-                               request = await SetupRequestAsync (address).ConfigureAwait (false);
-                               response = await GetWebResponseTaskAsync (request, cts.Token).ConfigureAwait (false);
-                               await DownloadFileTaskAsyncCore (request, response, fileName, cts.Token).ConfigureAwait (false);
+                               request = await SetupRequestAsync (address);
+                               response = await GetWebResponseTaskAsync (request, cts.Token);
+                               await DownloadFileTaskAsyncCore (request, response, fileName, cts.Token);
                                OnDownloadFileCompleted (new AsyncCompletedEventArgs (null, false, null));
                        } catch (WebException ex) {
                                OnDownloadFileCompleted (new AsyncCompletedEventArgs (ex, false, null));
@@ -1666,12 +1668,12 @@ namespace System.Net
                                int nread = 0;
                                long notify_total = 0;
                                token.ThrowIfCancellationRequested ();
-                               while ((nread = await st.ReadAsync (buffer, 0, length, token).ConfigureAwait (false)) != 0) {
+                               while ((nread = await st.ReadAsync (buffer, 0, length, token)) != 0) {
                                        notify_total += nread;
                                        OnDownloadProgressChanged (
                                                new DownloadProgressChangedEventArgs (notify_total, response.ContentLength, null));
                                        token.ThrowIfCancellationRequested ();
-                                       await f.WriteAsync (buffer, 0, nread, token).ConfigureAwait (false);
+                                       await f.WriteAsync (buffer, 0, nread, token);
                                        token.ThrowIfCancellationRequested ();
                                }
                        }
@@ -1695,8 +1697,8 @@ namespace System.Net
                        try {
                                SetBusy ();
                                cts = new CancellationTokenSource ();
-                               request = await SetupRequestAsync (address).ConfigureAwait (false);
-                               WebResponse response = await GetWebResponseTaskAsync (request, cts.Token).ConfigureAwait (false);
+                               request = await SetupRequestAsync (address);
+                               WebResponse response = await GetWebResponseTaskAsync (request, cts.Token);
                                var result = response.GetResponseStream ();
                                cts.Token.ThrowIfCancellationRequested ();
                                OnOpenReadCompleted (new OpenReadCompletedEventArgs (result, null, false, null));
@@ -1737,9 +1739,9 @@ namespace System.Net
                        try {
                                SetBusy ();
                                cts = new CancellationTokenSource ();
-                               request = await SetupRequestAsync (address).ConfigureAwait (false);
-                               response = await GetWebResponseTaskAsync (request, cts.Token).ConfigureAwait (false);
-                               var data = await ReadAllTaskAsync (request, response, cts.Token).ConfigureAwait (false);
+                               request = await SetupRequestAsync (address);
+                               response = await GetWebResponseTaskAsync (request, cts.Token);
+                               var data = await ReadAllTaskAsync (request, response, cts.Token);
                                cts.Token.ThrowIfCancellationRequested ();
                                var text = encoding.GetString (data);
                                OnDownloadStringCompleted (new DownloadStringCompletedEventArgs (text, null, false, null));
index 7f48185c64e2fa4e9acd823655b48d659a6f1cc6..d82701c5c523a24045d036c2938de236f7e8481e 100644 (file)
@@ -3,11 +3,10 @@
 //
 // Authors:
 //     Thomas Neidhart (tome@sbox.tugraz.at)
-//  Sebastien Pouliot  <sebastien@xamarin.com>
+//     Sebastien Pouliot <sebastien@ximian.com>
 //
 // Portions (C) 2002, 2003 Motus Technologies Inc. (http://www.motus.com)
 // Copyright (C) 2004-2008 Novell, Inc (http://www.novell.com)
-// Copyright 2012 Xamarin Inc.
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
@@ -46,18 +45,18 @@ namespace Mono.Security.Cryptography {
        internal abstract class SymmetricTransform : ICryptoTransform {
                protected SymmetricAlgorithm algo;
                protected bool encrypt;
-               private int BlockSizeByte;
-               private byte[] temp;
-               private byte[] temp2;
+               protected int BlockSizeByte;
+               protected byte[] temp;
+               protected byte[] temp2;
                private byte[] workBuff;
                private byte[] workout;
+               protected PaddingMode padmode;
 #if !MOONLIGHT
                // Silverlight 2.0 does not support any feedback mode
-               private int FeedBackByte;
-               private int FeedBackIter;
+               protected int FeedBackByte;
 #endif
                private bool m_disposed = false;
-               private bool lastBlock;
+               protected bool lastBlock;
 
                public SymmetricTransform (SymmetricAlgorithm symmAlgo, bool encryption, byte[] rgbIV) 
                {
@@ -76,14 +75,13 @@ namespace Mono.Security.Cryptography {
                                        rgbIV.Length, BlockSizeByte);
                                throw new CryptographicException (msg);
                        }
+                       padmode = algo.Padding;
                        // mode buffers
                        temp = new byte [BlockSizeByte];
                        Buffer.BlockCopy (rgbIV, 0, temp, 0, System.Math.Min (BlockSizeByte, rgbIV.Length));
                        temp2 = new byte [BlockSizeByte];
 #if !MOONLIGHT
                        FeedBackByte = (algo.FeedbackSize >> 3);
-                       if (FeedBackByte != 0)
-                               FeedBackIter = (int) BlockSizeByte / FeedBackByte;
 #endif
                        // transform buffers
                        workBuff = new byte [BlockSizeByte];
@@ -186,31 +184,31 @@ namespace Mono.Security.Cryptography {
 
 #if !MOONLIGHT
                // Cipher-FeedBack (CFB)
+               // this is how *CryptoServiceProvider implements CFB
+               // only AesCryptoServiceProvider support CFB > 8
+               // RijndaelManaged is incompatible with this implementation (and overrides it in it's own transform)
                protected virtual void CFB (byte[] input, byte[] output) 
                {
                        if (encrypt) {
-                               for (int x = 0; x < FeedBackIter; x++) {
+                               for (int x = 0; x < BlockSizeByte; x++) {
                                        // temp is first initialized with the IV
                                        ECB (temp, temp2);
-
-                                       for (int i = 0; i < FeedBackByte; i++)
-                                               output[i + x] = (byte)(temp2[i] ^ input[i + x]);
-                                       Buffer.BlockCopy (temp, FeedBackByte, temp, 0, BlockSizeByte - FeedBackByte);
-                                       Buffer.BlockCopy (output, x, temp, BlockSizeByte - FeedBackByte, FeedBackByte);
+                                       output [x] = (byte) (temp2 [0] ^ input [x]);
+                                       Buffer.BlockCopy (temp, 1, temp, 0, BlockSizeByte - 1);
+                                       Buffer.BlockCopy (output, x, temp, BlockSizeByte - 1, 1);
                                }
                        }
                        else {
-                               for (int x = 0; x < FeedBackIter; x++) {
+                               for (int x = 0; x < BlockSizeByte; x++) {
                                        // we do not really decrypt this data!
                                        encrypt = true;
                                        // temp is first initialized with the IV
                                        ECB (temp, temp2);
                                        encrypt = false;
 
-                                       Buffer.BlockCopy (temp, FeedBackByte, temp, 0, BlockSizeByte - FeedBackByte);
-                                       Buffer.BlockCopy (input, x, temp, BlockSizeByte - FeedBackByte, FeedBackByte);
-                                       for (int i = 0; i < FeedBackByte; i++)
-                                               output[i + x] = (byte)(temp2[i] ^ input[i + x]);
+                                       Buffer.BlockCopy (temp, 1, temp, 0, BlockSizeByte - 1);
+                                       Buffer.BlockCopy (input, x, temp, BlockSizeByte - 1, 1);
+                                       output [x] = (byte) (temp2 [0] ^ input [x]);
                                }
                        }
                }
@@ -259,7 +257,7 @@ namespace Mono.Security.Cryptography {
                        // only PKCS7 is supported Silverlight 2.0
                        if (KeepLastBlock) {
 #else
-                       if (!encrypt && (0 > len) && ((algo.Padding == PaddingMode.None) || (algo.Padding == PaddingMode.Zeros))) {
+                       if (!encrypt && (0 > len) && ((padmode == PaddingMode.None) || (padmode == PaddingMode.Zeros))) {
                                throw new CryptographicException ("outputBuffer", Locale.GetText ("Overflow"));
                        } else if (KeepLastBlock) {
 #endif
@@ -284,7 +282,7 @@ namespace Mono.Security.Cryptography {
                                // only PKCS7 is supported Silverlight 2.0
                                return !encrypt;
 #else
-                               return ((!encrypt) && (algo.Padding != PaddingMode.None) && (algo.Padding != PaddingMode.Zeros));
+                               return ((!encrypt) && (padmode != PaddingMode.None) && (padmode != PaddingMode.Zeros));
 #endif
                        }
                }
@@ -359,7 +357,7 @@ namespace Mono.Security.Cryptography {
                }
 #endif
 
-               private byte[] FinalEncrypt (byte[] inputBuffer, int inputOffset, int inputCount) 
+               protected virtual byte[] FinalEncrypt (byte[] inputBuffer, int inputOffset, int inputCount) 
                {
                        // are there still full block to process ?
                        int full = (inputCount / BlockSizeByte) * BlockSizeByte;
@@ -370,27 +368,26 @@ namespace Mono.Security.Cryptography {
                        // only PKCS7 is supported Silverlight 2.0
                        total += BlockSizeByte;
 #else
-                       switch (algo.Padding) {
+                       switch (padmode) {
                        case PaddingMode.ANSIX923:
                        case PaddingMode.ISO10126:
                        case PaddingMode.PKCS7:
                                // we need to add an extra block for padding
                                total += BlockSizeByte;
                                break;
-                       case PaddingMode.None:
-                               if ((rem != 0) && (algo.Mode != CipherMode.CFB))
-                                       throw new CryptographicException ("invalid block length");
-                               goto default;
                        default:
                                if (inputCount == 0)
                                        return new byte [0];
                                if (rem != 0) {
+                                       if (padmode == PaddingMode.None)
+                                               throw new CryptographicException ("invalid block length");
                                        // zero padding the input (by adding a block for the partial data)
                                        byte[] paddedInput = new byte [full + BlockSizeByte];
                                        Buffer.BlockCopy (inputBuffer, inputOffset, paddedInput, 0, inputCount);
                                        inputBuffer = paddedInput;
                                        inputOffset = 0;
-                                       total = paddedInput.Length;
+                                       inputCount = paddedInput.Length;
+                                       total = inputCount;
                                }
                                break;
                        }
@@ -416,7 +413,7 @@ namespace Mono.Security.Cryptography {
                        Buffer.BlockCopy (inputBuffer, inputOffset, res, full, rem);
                        InternalTransformBlock (res, full, BlockSizeByte, res, full);
 #else
-                       switch (algo.Padding) {
+                       switch (padmode) {
                        case PaddingMode.ANSIX923:
                                // XX 00 00 00 00 00 00 07 (zero + padding length)
                                res [res.Length - 1] = padding;
@@ -440,36 +437,18 @@ namespace Mono.Security.Cryptography {
                                // the last padded block will be transformed in-place
                                InternalTransformBlock (res, full, BlockSizeByte, res, full);
                                break;
-                       case PaddingMode.Zeros:
-                               InternalTransformBlock (inputBuffer, inputOffset, BlockSizeByte, res, outputOffset);
-                               break;
-                       case PaddingMode.None:
+                       default:
                                InternalTransformBlock (inputBuffer, inputOffset, BlockSizeByte, res, outputOffset);
-                               if ((inputCount != total) && (algo.Mode == CipherMode.CFB)) {
-                                       byte[] part = new byte [inputCount];
-                                       Buffer.BlockCopy (res, 0, part, 0, inputCount);
-                                       res = part;
-                               }
                                break;
                        }
 #endif // NET_2_1
                        return res;
                }
 
-               private byte[] FinalDecrypt (byte[] inputBuffer, int inputOffset, int inputCount) 
+               protected virtual byte[] FinalDecrypt (byte[] inputBuffer, int inputOffset, int inputCount) 
                {
-                       int full = (inputCount / BlockSizeByte) * BlockSizeByte;
-                       int rem = inputCount - full;
-                       if (rem > 0) {
-                               if (algo.Mode != CipherMode.CFB)
-                                       throw new CryptographicException ("Invalid input block size.");
-                               full += BlockSizeByte;
-                               byte[] paddedInput = new byte [full];
-                               Buffer.BlockCopy (inputBuffer, 0, paddedInput, 0, inputCount);
-                               inputBuffer = paddedInput;
-                       }
-
-                       int total = full;
+                       int full = inputCount;
+                       int total = inputCount;
                        if (lastBlock)
                                total += BlockSizeByte;
 
@@ -502,34 +481,31 @@ namespace Mono.Security.Cryptography {
                        }
                        total -= padding;
 #else
-                       switch (algo.Padding) {
+                       switch (padmode) {
                        case PaddingMode.ANSIX923:
                                if ((padding == 0) || (padding > BlockSizeByte))
-                                       ThrowBadPaddingException (algo.Padding, padding, -1);
+                                       ThrowBadPaddingException (padmode, padding, -1);
                                for (int i = padding - 1; i > 0; i--) {
                                        if (res [total - 1 - i] != 0x00)
-                                               ThrowBadPaddingException (algo.Padding, -1, i);
+                                               ThrowBadPaddingException (padmode, -1, i);
                                }
                                total -= padding;
                                break;
                        case PaddingMode.ISO10126:
                                if ((padding == 0) || (padding > BlockSizeByte))
-                                       ThrowBadPaddingException (algo.Padding, padding, -1);
+                                       ThrowBadPaddingException (padmode, padding, -1);
                                total -= padding;
                                break;
                        case PaddingMode.PKCS7:
                                if ((padding == 0) || (padding > BlockSizeByte))
-                                       ThrowBadPaddingException (algo.Padding, padding, -1);
+                                       ThrowBadPaddingException (padmode, padding, -1);
                                for (int i = padding - 1; i > 0; i--) {
                                        if (res [total - 1 - i] != padding)
-                                               ThrowBadPaddingException (algo.Padding, -1, i);
+                                               ThrowBadPaddingException (padmode, -1, i);
                                }
                                total -= padding;
                                break;
                        case PaddingMode.None:  // nothing to do - it's a multiple of block size
-                               if (algo.Mode == CipherMode.CFB)
-                                       total = inputCount;
-                               break;
                        case PaddingMode.Zeros: // nothing to do - user must unpad himself
                                break;
                        }
index 396f11f6f44ab0d6d284f893917a81336891f60b..e0ce34a4e8b9f501284aedcd30ee396863ca768d 100644 (file)
@@ -35,8 +35,7 @@ namespace System.Security.Cryptography {
 
        // Notes: This class is "publicly" new in Fx 2.0 but was already 
        // existing in Fx 1.0. So this new class is only calling the old
-       // (and more general) one (RijndaelTransform) located in 
-       // RijndaelManaged.cs.
+       // (and more general) one (RijndaelTransform)
 
        [ComVisible (true)]
        public sealed class RijndaelManagedTransform: ICryptoTransform, IDisposable {
@@ -100,13 +99,13 @@ namespace System.Security.Cryptography {
                }
        }
 
-       internal class RijndaelTransform : SymmetricTransform
-       {
+       class RijndaelTransform : SymmetricTransform {
                private uint[] expandedKey;
-       
+
                private int Nb;
                private int Nk;
                private int Nr;
+               private int ts;
        
                public RijndaelTransform (Rijndael algo, bool encryption, byte[] key, byte[] iv) : base (algo, encryption, iv)
                {
@@ -126,6 +125,13 @@ namespace System.Security.Cryptography {
                        }
                        keySize <<= 3; // bytes -> bits
                        int blockSize = algo.BlockSize;
+                       if (algo.Mode == CipherMode.CFB) {
+                               if (algo.Padding == PaddingMode.None)
+                                       padmode = PaddingMode.Zeros;
+                               ts = algo.FeedbackSize >> 3;
+                       } else {
+                               ts = blockSize >> 3;
+                       }
 
                        this.Nb = (blockSize >> 5); // div 32
                        this.Nk = (keySize >> 5); // div 32
@@ -181,6 +187,14 @@ namespace System.Security.Cryptography {
                        expandedKey = exKey;
                }
 
+               public override int InputBlockSize {
+                       get { return ts; }
+               }
+               
+               public override int OutputBlockSize {
+                       get { return ts; }
+               }
+
                public void Clear () 
                {
                        Dispose (true);
@@ -217,6 +231,82 @@ namespace System.Security.Cryptography {
                        }
                }
 
+               // RijndaelManaged does not implement CFB like any *CryptoServiceProvider does
+               // not even AesCryptoServiceProvider, while AesManaged does not support CFB at all
+               protected override void CFB (byte[] input, byte[] output) 
+               {
+                       bool last = lastBlock && padmode == PaddingMode.Zeros;
+                       int outer = last ? FeedBackByte : BlockSizeByte / FeedBackByte;
+                       int inner = last ? Nb : FeedBackByte;
+                       if (encrypt) {
+                               for (int x = 0; x < outer; x++) {
+                                       // temp is first initialized with the IV
+                                       ECB (temp, temp2);
+                                       
+                                       for (int i = 0; i < inner; i++)
+                                               output[i + x] = (byte)(temp2[i] ^ input[i + x]);
+                                       Buffer.BlockCopy (temp, inner, temp, 0, BlockSizeByte - inner);
+                                       Buffer.BlockCopy (output, x, temp, BlockSizeByte - inner, inner);
+                               }
+                       }
+                       else {
+                               for (int x = 0; x < outer; x++) {
+                                       // we do not really decrypt this data!
+                                       encrypt = true;
+                                       // temp is first initialized with the IV
+                                       ECB (temp, temp2);
+                                       encrypt = false;
+                                       
+                                       Buffer.BlockCopy (temp, inner, temp, 0, BlockSizeByte - inner);
+                                       Buffer.BlockCopy (input, x, temp, BlockSizeByte - inner, inner);
+                                       for (int i = 0; i < inner; i++)
+                                               output[i + x] = (byte)(temp2[i] ^ input[i + x]);
+                               }
+                       }
+               }
+
+               protected override byte[] FinalEncrypt (byte[] inputBuffer, int inputOffset, int inputCount)
+               {
+                       var result = base.FinalEncrypt (inputBuffer, inputOffset, inputCount);
+                       if (algo.Mode != CipherMode.CFB)
+                               return result;
+
+                       switch (algo.Padding) {
+                       // RijdaelManaged treats both Zeros and None identically
+                       case PaddingMode.None:
+                       case PaddingMode.Zeros:
+                               if (inputCount != result.Length) {
+                                       byte[] part = new byte [inputCount];
+                                       Buffer.BlockCopy (result, 0, part, 0, inputCount);
+                                       return part;
+                               }
+                               break;
+                       }
+                       return result;
+               }
+
+               protected override byte[] FinalDecrypt (byte[] inputBuffer, int inputOffset, int inputCount) 
+               {
+                       int full = (inputCount / BlockSizeByte) * BlockSizeByte;
+                       int rem = inputCount - full;
+                       if (rem == 0)
+                               return base.FinalDecrypt (inputBuffer, inputOffset, inputCount);
+
+                       if (algo.Mode != CipherMode.CFB)
+                               throw new CryptographicException ("Invalid input block size.");
+
+                       byte[] final = new byte [inputCount];
+                       full += BlockSizeByte;
+                       byte[] paddedInput = new byte [full];
+                       Buffer.BlockCopy (inputBuffer, 0, paddedInput, 0, inputCount);
+                       inputBuffer = paddedInput;
+                       inputOffset = 0;
+                       inputCount = full;
+                       var result = base.FinalDecrypt (inputBuffer, inputOffset, inputCount);
+                       Buffer.BlockCopy (result, 0, final, 0, final.Length);
+                       return final;
+               }
+
                private UInt32 SubByte (UInt32 a)
                {
                        UInt32 value = 0xff & a;
index 60b57e7e7536b33dd99ebfab6ab36f4be80bae13..99b41562aef5e07b5075f35377e8b9fff6e210c7 100644 (file)
@@ -114,6 +114,10 @@ namespace System.Security.Cryptography {
                                        throw new CryptographicException (
                                                Locale.GetText ("feedback size larger than block size"));
                                }
+                               if ((value & 3) != 0) {
+                                       throw new CryptographicException (
+                                               Locale.GetText ("feedback size must be a multiple of 8 (bits)"));
+                               }
                                this.FeedbackSizeValue = value;
                        }
                }
index 3bbb7569ff35b7321013edd7bad4646b6fcef246..5c4cedf15b02994fd6c90bac1d7c03be391fd599 100644 (file)
@@ -47,15 +47,11 @@ namespace System.Threading
                        currentContext = context;
                }
                
-               public static SynchronizationContext Current
-               {
+               public static SynchronizationContext Current {
                        get {
 #if MONODROID
                                if (currentContext == null)
                                        currentContext = AndroidPlatform.GetDefaultSyncContext ();
-#elif NET_2_1
-                               if (currentContext == null)
-                                       currentContext = new SynchronizationContext ();
 #endif
                                return currentContext;
                        }
index 7bebd9c013bd1554fd4285ed54e5a61454841f0c..0f084b5fe39b832800f0395ae797878e161fe070 100644 (file)
@@ -381,10 +381,14 @@ namespace System.Threading
                                                //PrintList ();
                                                ms_wait = -1;
                                                if (min_next_run != Int64.MaxValue) {
-                                                       long diff = min_next_run - DateTime.GetTimeMonotonic (); 
-                                                       ms_wait = (int)(diff / TimeSpan.TicksPerMillisecond);
-                                                       if (ms_wait < 0)
-                                                               ms_wait = 0;
+                                                       long diff = (min_next_run - DateTime.GetTimeMonotonic ())  / TimeSpan.TicksPerMillisecond;
+                                                       if (diff > Int32.MaxValue)
+                                                               ms_wait = Int32.MaxValue - 1;
+                                                       else {
+                                                               ms_wait = (int)(diff);
+                                                               if (ms_wait < 0)
+                                                                       ms_wait = 0;
+                                                       }
                                                }
                                        }
                                        // Wait until due time or a timer is changed and moves from/to the first place in the list.
index 0a8152ae5d89d5cceb446e02559ae22e748a4b0a..8ee31d2069311e906eeb091776402404159e54a3 100644 (file)
@@ -140,6 +140,23 @@ namespace System
                        Copy (this, this.GetLowerBound (0), array, index, this.GetLength (0));
                }
 
+#if NET_4_5
+               internal T InternalArray__IReadOnlyList_get_Item<T> (int index)
+               {
+                       if (unchecked ((uint) index) >= unchecked ((uint) Length))
+                               throw new ArgumentOutOfRangeException ("index");
+
+                       T value;
+                       GetGenericValueImpl (index, out value);
+                       return value;
+               }
+
+               internal int InternalArray__IReadOnlyCollection_get_Count ()
+               {
+                       return Length;
+               }
+#endif
+
                internal void InternalArray__Insert<T> (int index, T item)
                {
                        throw new NotSupportedException ("Collection is of a fixed size");
index 3f8878b0439bb5d04ba580ba6551da9fe9371d71..e1c32538b8bd47efd37af704d1e9ff6ca5431afd 100644 (file)
@@ -56,7 +56,7 @@ namespace System {
                 * of icalls, do not require an increment.
                 */
 #pragma warning disable 169
-               private const int mono_corlib_version = 108;
+               private const int mono_corlib_version = 109;
 #pragma warning restore 169
 
                [ComVisible (true)]
index 1aa8f5fc16b58e4b231c25bf88ba590c2d6b5950..c4e6a7a4fdcfd34f7471d9bf2b6149dc835dca19 100644 (file)
@@ -36,7 +36,7 @@ using System.Runtime.InteropServices;
 namespace System {
 
        [InterfaceType (ComInterfaceType.InterfaceIsIUnknown)]
-       [Guid ("27FFF232-A7A8-40DD-8D4A-734AD59fCD41")]
+       [Guid ("27FFF232-A7A8-40DD-8D4A-734AD59FCD41")]
        [ComVisible(true)]
        public interface IAppDomainSetup {
 
diff --git a/mcs/class/corlib/Test/System.Security.Cryptography/AesCfbTest.cs b/mcs/class/corlib/Test/System.Security.Cryptography/AesCfbTest.cs
new file mode 100644 (file)
index 0000000..18ecbc8
--- /dev/null
@@ -0,0 +1,280 @@
+//
+// Aes(CryptoServiceProvider) CFB Unit Tests 
+//
+// Author:
+//     Sebastien Pouliot  <sebastien@xamarin.com>
+//
+// Copyright (C) 2013 Xamarin Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Security.Cryptography;
+
+using NUnit.Framework;
+
+namespace MonoTests.System.Security.Cryptography {
+       
+       [TestFixture]
+       public class AesCfbTests : CfbTests {
+
+               protected override SymmetricAlgorithm GetInstance ()
+               {
+                       return Aes.Create ();
+               }
+
+               [Test]
+               public void Roundtrip ()
+               {
+                       // that will return a AesCryptoServiceProvider
+                       var aes = GetInstance ();
+                       Assert.AreEqual ("System.Security.Cryptography.AesCryptoServiceProvider", aes.ToString (), "Default");
+                       Assert.AreEqual (8, aes.FeedbackSize, "FeedbackSize");
+                       ProcessBlockSizes (aes);
+               }
+
+               // AesCryptoServiceProvider is not *Limited* since it supports CFB8-64
+               // but like all *CryptoServiceProvider implementations it refuse Padding.None
+               static PaddingMode[] csp_padding_modes = new [] { PaddingMode.PKCS7, PaddingMode.Zeros, PaddingMode.ANSIX923, PaddingMode.ISO10126 };
+               
+               protected override PaddingMode [] PaddingModes {
+                       get { return csp_padding_modes; }
+               }
+
+               protected override void CFB (SymmetricAlgorithm algo)
+               {
+                       algo.Mode = CipherMode.CFB;
+                       // limited from 8-64 bits (RijndaelManaged goes to blocksize - but is incompatible)
+                       for (int i = 8; i <= 64; i += 8) {
+                               algo.FeedbackSize = i;
+                               CFB (algo, i);
+                       }
+               }
+               
+               protected override string GetExpectedResult (SymmetricAlgorithm algo, byte [] encryptedData)
+               {
+#if false
+                       return base.GetExpectedResult (algo, encryptedData);
+#else
+                       return test_vectors [GetId (algo)];
+#endif
+               }
+               
+               static Dictionary<int, string> test_vectors = new Dictionary<int, string> () {
+                       // padding None : The input data is not a complete block.
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 8
+                       { -2139094520, "99-69-66-99-00-71-BD-07-C1-51-7A-60-DD-3C-03-A6" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 16
+                       { -2139094512, "99-98-A2-5F-57-12-44-8B-38-01-A6-01-AD-0B-B8-59" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 24
+                       { -2139094504, "99-98-51-14-92-57-8A-B9-F5-B7-3D-CC-C9-C0-1D-0E" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 32
+                       { -2139094496, "99-98-51-E5-E2-1D-47-05-A5-A6-5C-A4-FF-EC-30-E5" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 40
+                       { -2139094488, "99-98-51-E5-15-6E-C4-AE-D1-53-58-D1-D7-68-EA-FD" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 48
+                       { -2139094480, "99-98-51-E5-15-9F-DC-EE-C9-47-73-AB-74-B8-32-08" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 56
+                       { -2139094472, "99-98-51-E5-15-9F-2F-57-BD-43-B4-63-71-18-39-B6" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 64
+                       { -2139094464, "99-98-51-E5-15-9F-2F-A6-09-DC-C8-55-6F-EA-FC-21" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 8
+                       { -2139094264, "99-66-48-F8-D6-AB-E6-A6-A6-D8-B3-32-66-2F-44-6E" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 16
+                       { -2139094256, "99-98-AC-6E-83-98-A2-FF-4B-20-E9-79-31-9A-66-81" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 24
+                       { -2139094248, "99-98-51-19-42-6B-6F-34-29-48-1C-F4-2D-66-2E-48" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 32
+                       { -2139094240, "99-98-51-E5-EE-9B-3F-56-C7-47-3A-E5-5A-2D-6E-2E" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 40
+                       { -2139094232, "99-98-51-E5-15-65-32-85-14-5A-C6-74-13-0A-F5-DC" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 48
+                       { -2139094224, "99-98-51-E5-15-9F-D6-2F-2D-31-57-7C-AC-8C-53-B9" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 56
+                       { -2139094216, "99-98-51-E5-15-9F-2F-5E-F4-F8-DF-50-AE-70-DB-E9" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 64
+                       { -2139094208, "99-98-51-E5-15-9F-2F-A6-01-E3-E0-EB-87-35-30-74" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 8
+                       { -2139094008, "99-66-48-F8-D6-AB-E6-A6-A6-D8-B3-32-66-2F-44-61" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 16
+                       { -2139094000, "99-98-AC-6E-83-98-A2-FF-4B-20-E9-79-31-9A-66-8F" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 24
+                       { -2139093992, "99-98-51-19-42-6B-6F-34-29-48-1C-F4-2D-66-2E-45" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 32
+                       { -2139093984, "99-98-51-E5-EE-9B-3F-56-C7-47-3A-E5-5A-2D-6E-22" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 40
+                       { -2139093976, "99-98-51-E5-15-65-32-85-14-5A-C6-74-13-0A-F5-D7" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 48
+                       { -2139093968, "99-98-51-E5-15-9F-D6-2F-2D-31-57-7C-AC-8C-53-B3" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 56
+                       { -2139093960, "99-98-51-E5-15-9F-2F-5E-F4-F8-DF-50-AE-70-DB-E0" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 64
+                       { -2139093952, "99-98-51-E5-15-9F-2F-A6-01-E3-E0-EB-87-35-30-7C" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 8
+                       { -2139093752, "99-1B-4F-28-42-3F-FE-50-C4-1A-E3-27-7A-BF-95-EB" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 16
+                       { -2139093744, "99-98-E4-AE-6B-9D-EC-6A-4E-52-E9-60-30-26-E0-01" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 24
+                       { -2139093736, "99-98-51-BF-A0-E9-53-CD-4E-50-35-A3-73-48-F1-E1" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 32
+                       { -2139093728, "99-98-51-E5-73-AA-BD-FC-D8-28-E0-5D-CB-B5-3C-70" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 40
+                       { -2139093720, "99-98-51-E5-15-DF-BF-29-0B-30-44-52-B6-FD-5E-66" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 48
+                       { -2139093712, "99-98-51-E5-15-9F-54-26-F7-10-58-54-5A-EB-6D-07" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 56
+                       { -2139093704, "99-98-51-E5-15-9F-2F-6D-F7-54-EC-5E-63-DE-42-4F" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 64
+                       { -2139093696, "99-98-51-E5-15-9F-2F-A6-7B-00-DA-C3-BC-C3-79-96" },
+                       // padding None : The input data is not a complete block.
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 8
+                       { -2134900216, "55-1E-15-41-27-60-35-C7-73-7F-23-4F-75-0E-AF-FB" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 16
+                       { -2134900208, "55-EF-7E-C3-9E-85-57-7B-10-47-8C-CB-89-2E-47-76" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 24
+                       { -2134900200, "55-EF-8D-2B-1A-10-5E-6A-D8-D0-93-61-3D-47-E4-E4" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 32
+                       { -2134900192, "55-EF-8D-DA-C8-DB-63-C4-44-4F-F4-B9-D3-D6-49-FE" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 40
+                       { -2134900184, "55-EF-8D-DA-3F-66-3B-8F-9E-56-CE-FB-9D-1C-D2-57" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 48
+                       { -2134900176, "55-EF-8D-DA-3F-97-F7-50-D1-C0-8C-1C-8A-23-72-80" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 56
+                       { -2134900168, "55-EF-8D-DA-3F-97-04-72-4C-8B-56-79-92-0E-DD-64" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 64
+                       { -2134900160, "55-EF-8D-DA-3F-97-04-83-3B-83-33-8C-CD-B0-D3-F9" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 8
+                       { -2134899960, "55-11-47-22-49-48-50-3E-D1-F9-E7-86-20-CC-0A-97" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 16
+                       { -2134899952, "55-EF-70-F3-BB-AA-FD-C8-A7-86-43-2C-4E-95-99-43" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 24
+                       { -2134899944, "55-EF-8D-26-F9-A2-3A-A2-E8-AD-93-34-53-56-B5-54" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 32
+                       { -2134899936, "55-EF-8D-DA-C4-D3-27-45-07-BF-C8-0E-EB-06-10-86" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 40
+                       { -2134899928, "55-EF-8D-DA-3F-6D-6A-BB-66-D5-AF-2E-C8-DF-BC-19" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 48
+                       { -2134899920, "55-EF-8D-DA-3F-97-FD-FA-4D-76-73-78-F6-6D-8F-0B" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 56
+                       { -2134899912, "55-EF-8D-DA-3F-97-04-7B-C7-27-61-14-44-3E-2A-88" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 64
+                       { -2134899904, "55-EF-8D-DA-3F-97-04-83-33-87-1A-F8-6A-27-BA-60" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 8
+                       { -2134899704, "55-11-47-22-49-48-50-3E-D1-F9-E7-86-20-CC-0A-98" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 16
+                       { -2134899696, "55-EF-70-F3-BB-AA-FD-C8-A7-86-43-2C-4E-95-99-4D" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 24
+                       { -2134899688, "55-EF-8D-26-F9-A2-3A-A2-E8-AD-93-34-53-56-B5-59" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 32
+                       { -2134899680, "55-EF-8D-DA-C4-D3-27-45-07-BF-C8-0E-EB-06-10-8A" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 40
+                       { -2134899672, "55-EF-8D-DA-3F-6D-6A-BB-66-D5-AF-2E-C8-DF-BC-12" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 48
+                       { -2134899664, "55-EF-8D-DA-3F-97-FD-FA-4D-76-73-78-F6-6D-8F-01" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 56
+                       { -2134899656, "55-EF-8D-DA-3F-97-04-7B-C7-27-61-14-44-3E-2A-81" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 64
+                       { -2134899648, "55-EF-8D-DA-3F-97-04-83-33-87-1A-F8-6A-27-BA-68" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 8
+                       { -2134899448, "55-E6-52-56-F3-5C-82-2E-04-E8-9C-72-F5-56-61-C2" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 16
+                       { -2134899440, "55-EF-58-DB-49-72-12-E1-2D-B2-B7-33-B3-92-76-91" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 24
+                       { -2134899432, "55-EF-8D-55-FF-7B-89-F7-B9-22-76-47-D8-BA-52-D7" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 32
+                       { -2134899424, "55-EF-8D-DA-B1-B7-68-3A-54-47-71-4D-43-48-C2-50" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 40
+                       { -2134899416, "55-EF-8D-DA-3F-84-6C-2C-98-E7-AE-B6-C2-97-1C-7E" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 48
+                       { -2134899408, "55-EF-8D-DA-3F-97-C3-8F-63-2D-6B-B3-86-D2-61-85" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 56
+                       { -2134899400, "55-EF-8D-DA-3F-97-04-2D-7B-E6-5A-5B-10-5F-B5-9E" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 64
+                       { -2134899392, "55-EF-8D-DA-3F-97-04-83-95-74-A3-86-78-66-13-3A" },
+                       // padding None : The input data is not a complete block.
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 8
+                       { -2130705912, "23-D9-77-80-5B-FA-F1-6D-6D-39-98-60-DF-75-DF-49" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 16
+                       { -2130705904, "23-28-07-BE-7A-18-9F-BC-B1-4D-F5-65-4B-5B-AD-D5" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 24
+                       { -2130705896, "23-28-F4-C9-30-DA-57-28-5F-8F-9E-BF-05-DF-D9-26" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 32
+                       { -2130705888, "23-28-F4-38-83-DF-89-E9-C9-5C-87-D5-FA-19-56-54" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 40
+                       { -2130705880, "23-28-F4-38-74-E0-5C-D0-D1-05-5D-42-AA-FC-2F-EF" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 48
+                       { -2130705872, "23-28-F4-38-74-11-19-31-30-84-5D-FB-BE-69-BB-98" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 56
+                       { -2130705864, "23-28-F4-38-74-11-EA-29-1F-A5-02-D5-AA-78-4C-E8" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 64
+                       { -2130705856, "23-28-F4-38-74-11-EA-D8-68-29-E3-14-6B-BF-C4-2D" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 8
+                       { -2130705656, "23-D6-E9-75-83-FA-22-B3-96-27-CF-6D-BE-23-A4-D0" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 16
+                       { -2130705648, "23-28-09-B9-8E-0B-01-57-EE-D8-4F-44-69-F0-8A-28" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 24
+                       { -2130705640, "23-28-F4-C4-B7-B5-79-63-F0-CD-35-C6-39-3B-4D-02" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 32
+                       { -2130705632, "23-28-F4-38-8F-78-58-EE-93-06-FA-CA-21-64-70-96" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 40
+                       { -2130705624, "23-28-F4-38-74-EB-52-74-A3-80-87-48-3D-18-76-19" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 48
+                       { -2130705616, "23-28-F4-38-74-11-13-09-09-B5-B9-95-A9-FF-02-EE" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 56
+                       { -2130705608, "23-28-F4-38-74-11-EA-20-2A-87-0E-39-29-3A-84-A6" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 64
+                       { -2130705600, "23-28-F4-38-74-11-EA-D8-60-04-E9-5D-7A-C1-A8-85" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 8
+                       { -2130705400, "23-D6-E9-75-83-FA-22-B3-96-27-CF-6D-BE-23-A4-DF" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 16
+                       { -2130705392, "23-28-09-B9-8E-0B-01-57-EE-D8-4F-44-69-F0-8A-26" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 24
+                       { -2130705384, "23-28-F4-C4-B7-B5-79-63-F0-CD-35-C6-39-3B-4D-0F" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 32
+                       { -2130705376, "23-28-F4-38-8F-78-58-EE-93-06-FA-CA-21-64-70-9A" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 40
+                       { -2130705368, "23-28-F4-38-74-EB-52-74-A3-80-87-48-3D-18-76-12" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 48
+                       { -2130705360, "23-28-F4-38-74-11-13-09-09-B5-B9-95-A9-FF-02-E4" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 56
+                       { -2130705352, "23-28-F4-38-74-11-EA-20-2A-87-0E-39-29-3A-84-AF" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 64
+                       { -2130705344, "23-28-F4-38-74-11-EA-D8-60-04-E9-5D-7A-C1-A8-8D" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 8
+                       { -2130705144, "23-33-4F-8B-09-74-D9-8F-1F-78-F5-BD-31-C3-02-19" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 16
+                       { -2130705136, "23-28-33-EE-86-CE-4B-89-A0-DE-8F-10-4E-4D-27-86" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 24
+                       { -2130705128, "23-28-F4-44-74-47-57-7E-18-29-5B-3B-CB-64-3E-F9" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 32
+                       { -2130705120, "23-28-F4-38-09-D6-8E-A7-CE-40-BA-83-6D-5D-E0-7D" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 40
+                       { -2130705112, "23-28-F4-38-74-AD-A8-85-C7-78-BB-15-9E-39-32-14" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 48
+                       { -2130705104, "23-28-F4-38-74-11-95-73-21-90-F4-B8-E0-DB-5D-6B" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 56
+                       { -2130705096, "23-28-F4-38-74-11-EA-F8-5D-72-DE-4D-9E-75-5F-75" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 64
+                       { -2130705088, "23-28-F4-38-74-11-EA-D8-8A-E6-AB-F8-FD-8C-8B-19" },
+               };
+       }
+}
\ No newline at end of file
diff --git a/mcs/class/corlib/Test/System.Security.Cryptography/CfbTest.cs b/mcs/class/corlib/Test/System.Security.Cryptography/CfbTest.cs
new file mode 100644 (file)
index 0000000..287e265
--- /dev/null
@@ -0,0 +1,197 @@
+//
+// CFB Unit Tests 
+//
+// Author:
+//     Sebastien Pouliot  <sebastien@xamarin.com>
+//
+// Copyright (C) 2013 Xamarin Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Security.Cryptography;
+
+using NUnit.Framework;
+
+namespace MonoTests.System.Security.Cryptography {
+       
+       public abstract class CfbTests {
+
+               protected abstract SymmetricAlgorithm GetInstance ();
+               
+               protected void ProcessBlockSizes (SymmetricAlgorithm algo)
+               {
+                       algo.Padding = PaddingMode.None;
+                       foreach (KeySizes bs in algo.LegalBlockSizes) {
+                               for (int blockSize = bs.MinSize; blockSize <= bs.MaxSize; blockSize += bs.SkipSize) {
+                                       algo.BlockSize = blockSize;
+                                       ProcessKeySizes (algo);
+                                       // SkipSize can be 0 (e.g. DES) if only one block size is available
+                                       if (blockSize == bs.MaxSize)
+                                               break;
+                               }
+                       }
+               }
+               
+               protected void ProcessKeySizes (SymmetricAlgorithm algo)
+               {
+                       foreach (KeySizes ks in algo.LegalKeySizes) {
+                               for (int keySize = ks.MinSize; keySize <= ks.MaxSize; keySize += ks.SkipSize) {
+                                       algo.KeySize = keySize;
+                                       algo.Key = GetKey (algo);
+                                       algo.IV = new byte [algo.BlockSize / 8];
+                                       ProcessPadding (algo);
+                                       // SkipSize can be 0 (e.g. DES) if only one key size is available
+                                       if (keySize == ks.MaxSize)
+                                               break;
+                               }
+                       }
+               }
+
+               protected abstract PaddingMode[] PaddingModes { get; }
+
+               protected void ProcessPadding (SymmetricAlgorithm algo)
+               {
+                       foreach (var padding in PaddingModes) {
+                               algo.Padding = padding;
+                               CFB (algo);
+                       }
+               }
+               
+               protected virtual byte [] GetKey (SymmetricAlgorithm algo)
+               {
+                       return new byte [algo.KeySize / 8];
+               }
+               
+               protected abstract void CFB (SymmetricAlgorithm algo);
+               
+               protected int GetId (SymmetricAlgorithm algo)
+               {
+                       return (algo.BlockSize << 24) + (algo.KeySize << 16) + ((int) algo.Padding << 8) + algo.FeedbackSize;
+               }
+               
+               protected virtual string GetExpectedResult (SymmetricAlgorithm algo, byte [] encryptedData)
+               {
+                       int id = GetId (algo);
+                       string expected = BitConverter.ToString (encryptedData);
+                       Console.WriteLine ("// block size: {0}, key size: {1}, padding: {2}, feedback: {3}", algo.BlockSize, algo.KeySize, algo.Padding, algo.FeedbackSize);
+                       Console.WriteLine ("{{ {0}, \"{1}\" }},", id, expected);
+                       return expected;
+               }
+               
+               protected void CFB (SymmetricAlgorithm algo, int feedbackSize)
+               {
+                       byte [] data = new byte [feedbackSize >> 3];
+                       for (int i = 0; i < data.Length; i++)
+                               data [i] = (byte) (0xff - i);
+                       byte [] encdata = Encryptor (algo, data);
+                       string expected = GetExpectedResult (algo, encdata);
+                       string actual = null;
+                       if (algo.Padding == PaddingMode.ISO10126) {
+                               // ISO10126 uses random data so we can't compare the last bytes with a test vector
+                               actual = BitConverter.ToString (encdata, 0, data.Length);
+                               expected = expected.Substring (0, actual.Length);
+                       } else {
+                               actual = BitConverter.ToString (encdata);
+                       }
+                       Assert.AreEqual (expected, actual, "encrypted value");
+                       byte [] decdata = Decryptor (algo, encdata);
+                       if (algo.Padding == PaddingMode.Zeros) {
+                               // this requires manually unpadding the decrypted data - but unlike ISO10126
+                               // we know the rest of the data will be 0 (not random) so we check that
+                               byte [] resize = new byte [data.Length];
+                               Array.Copy (decdata, 0, resize, 0, resize.Length);
+                               // all zeros afterward!
+                               for (int i = resize.Length; i < decdata.Length; i++)
+                                       Assert.AreEqual (0, decdata [i], "padding zero {0}", i);
+                               decdata = resize;
+                       }
+                       Assert.AreEqual (data, decdata, "Roundtrip {0} {1}", algo.Mode, algo.FeedbackSize);
+               }
+               
+               protected virtual int GetTransformBlockSize (SymmetricAlgorithm algo)
+               {
+                       return algo.BlockSize / 8;
+               }
+               
+               byte [] Encryptor (SymmetricAlgorithm algo, byte [] data)
+               {
+                       using (ICryptoTransform t = algo.CreateEncryptor (algo.Key, algo.IV)) {
+                               int size = GetTransformBlockSize (algo);
+                               Assert.That (t.InputBlockSize == size, "Encryptor InputBlockSize {0} {1}", algo.Mode, algo.FeedbackSize);
+                               Assert.That (t.OutputBlockSize == size, "Encryptor OutputBlockSize {0} {1}", algo.Mode, algo.FeedbackSize);
+                               return t.TransformFinalBlock (data, 0, data.Length);
+                       }
+               }
+               
+               byte [] Decryptor (SymmetricAlgorithm algo, byte [] encdata)
+               {
+                       using (ICryptoTransform t = algo.CreateDecryptor (algo.Key, algo.IV)) {
+                               int size = GetTransformBlockSize (algo);
+                               Assert.That (t.InputBlockSize == size, "Decryptor InputBlockSize {0} {1}", algo.Mode, algo.FeedbackSize);
+                               Assert.That (t.OutputBlockSize == size, "Decryptor OutputBlockSize {0} {1}", algo.Mode, algo.FeedbackSize);
+                               return t.TransformFinalBlock (encdata, 0, encdata.Length);
+                       }
+               }
+       }
+       
+       // most algorithms are "limited" and only support CFB8
+       public abstract class LimitedCfbTests : CfbTests {
+
+               // all *CryptoServiceProvider implementation refuse Padding.None
+               static PaddingMode[] csp_padding_modes = new [] { PaddingMode.PKCS7, PaddingMode.Zeros, PaddingMode.ANSIX923, PaddingMode.ISO10126 };
+
+               protected override PaddingMode [] PaddingModes {
+                       get { return csp_padding_modes; }
+               }
+
+               [Test]
+               [ExpectedException (typeof (CryptographicException))]
+               public void Cfb_None ()
+               {
+                       using (var algo = GetInstance ()) {
+                               algo.Padding = PaddingMode.None;
+                               CFB (algo, 8);
+                       }
+               }
+
+               protected override void CFB (SymmetricAlgorithm algo)
+               {
+                       algo.Mode = CipherMode.CFB;
+                       // System.Security.Cryptography.CryptographicException : Feedback size for the cipher feedback mode (CFB) must be 8 bits.
+                       algo.FeedbackSize = 8;
+                       CFB (algo, algo.FeedbackSize);
+               }
+       }
+       
+       // DES and 3DES won't accept a key with all zero (since it's a weak key for them)
+       public abstract class WeakKeyCfbTests : LimitedCfbTests {
+               
+               protected override byte [] GetKey (SymmetricAlgorithm algo)
+               {
+                       var key = base.GetKey (algo);
+                       for (byte i = 0; i < key.Length; i++)
+                               key [i] = i;
+                       return key;
+               }
+       }
+}
\ No newline at end of file
diff --git a/mcs/class/corlib/Test/System.Security.Cryptography/DesCfbTest.cs b/mcs/class/corlib/Test/System.Security.Cryptography/DesCfbTest.cs
new file mode 100644 (file)
index 0000000..a8a73b4
--- /dev/null
@@ -0,0 +1,72 @@
+//
+// DES CFB Unit Tests 
+//
+// Author:
+//     Sebastien Pouliot  <sebastien@xamarin.com>
+//
+// Copyright (C) 2013 Xamarin Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Security.Cryptography;
+
+using NUnit.Framework;
+
+namespace MonoTests.System.Security.Cryptography {
+       
+       [TestFixture]
+       public class DesCfbTests : WeakKeyCfbTests {
+               
+               protected override SymmetricAlgorithm GetInstance ()
+               {
+                       return DES.Create ();
+               }
+
+               [Test]
+               public void Roundtrip ()
+               {
+                       ProcessBlockSizes (GetInstance ());
+               }
+               
+               static Dictionary<int, string> test_vectors = new Dictionary<int, string> () {
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 64, padding: PKCS7, feedback: 8
+                       { 1077936648, "5A-44-C0-F3-21-56-A4-8E" },
+                       // block size: 64, key size: 64, padding: Zeros, feedback: 8
+                       { 1077936904, "5A-43-7C-5D-A9-15-AB-5A" },
+                       // block size: 64, key size: 64, padding: ANSIX923, feedback: 8
+                       { 1077937160, "5A-43-7C-5D-A9-15-AB-5D" },
+                       // block size: 64, key size: 64, padding: ISO10126, feedback: 8
+                       { 1077937416, "5A-E6-7D-EF-3B-F8-E9-1C" },
+               };
+               
+               protected override string GetExpectedResult (SymmetricAlgorithm algo, byte [] encryptedData)
+               {
+#if false
+                       return base.GetExpectedResult (algo, encryptedData);
+#else
+                       return test_vectors [GetId (algo)];
+#endif
+               }
+       }
+}
\ No newline at end of file
diff --git a/mcs/class/corlib/Test/System.Security.Cryptography/Rc2CfbTest.cs b/mcs/class/corlib/Test/System.Security.Cryptography/Rc2CfbTest.cs
new file mode 100644 (file)
index 0000000..ab59e2e
--- /dev/null
@@ -0,0 +1,171 @@
+//
+// RC2 CFB Unit Tests 
+//
+// Author:
+//     Sebastien Pouliot  <sebastien@xamarin.com>
+//
+// Copyright (C) 2013 Xamarin Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Security.Cryptography;
+
+using NUnit.Framework;
+
+namespace MonoTests.System.Security.Cryptography {
+       
+       [TestFixture]
+       public class Rc2CbcTests : LimitedCfbTests {
+               
+               protected override SymmetricAlgorithm GetInstance ()
+               {
+                       return RC2.Create ();
+               }
+               
+               [Test]
+               public void Roundtrip ()
+               {
+                       ProcessBlockSizes (GetInstance ());
+               }
+
+               static Dictionary<int, string> test_vectors = new Dictionary<int, string> () {
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 40, padding: PKCS7, feedback: 8
+                       { 1076363784, "3F-B2-FC-4A-44-A6-47-31" },
+                       // block size: 64, key size: 40, padding: Zeros, feedback: 8
+                       { 1076364040, "3F-B5-03-E3-28-89-FD-01" },
+                       // block size: 64, key size: 40, padding: ANSIX923, feedback: 8
+                       { 1076364296, "3F-B5-03-E3-28-89-FD-06" },
+                       // block size: 64, key size: 40, padding: ISO10126, feedback: 8
+                       { 1076364552, "3F-1D-16-2D-49-17-90-3D" },
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 48, padding: PKCS7, feedback: 8
+                       { 1076888072, "2D-78-28-8C-D0-94-A1-3A" },
+                       // block size: 64, key size: 48, padding: Zeros, feedback: 8
+                       { 1076888328, "2D-7F-12-B8-25-CD-45-9B" },
+                       // block size: 64, key size: 48, padding: ANSIX923, feedback: 8
+                       { 1076888584, "2D-7F-12-B8-25-CD-45-9C" },
+                       // block size: 64, key size: 48, padding: ISO10126, feedback: 8
+                       { 1076888840, "2D-21-AA-BF-FC-09-24-11" },
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 56, padding: PKCS7, feedback: 8
+                       { 1077412360, "CB-48-99-CB-FF-73-EB-24" },
+                       // block size: 64, key size: 56, padding: Zeros, feedback: 8
+                       { 1077412616, "CB-4F-5B-19-90-24-2F-E4" },
+                       // block size: 64, key size: 56, padding: ANSIX923, feedback: 8
+                       { 1077412872, "CB-4F-5B-19-90-24-2F-E3" },
+                       // block size: 64, key size: 56, padding: ISO10126, feedback: 8
+                       { 1077413128, "CB-02-DF-DB-D7-31-01-25" },
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 64, padding: PKCS7, feedback: 8
+                       { 1077936648, "14-42-51-73-8F-E0-F6-6D" },
+                       // block size: 64, key size: 64, padding: Zeros, feedback: 8
+                       { 1077936904, "14-45-77-33-55-01-58-25" },
+                       // block size: 64, key size: 64, padding: ANSIX923, feedback: 8
+                       { 1077937160, "14-45-77-33-55-01-58-22" },
+                       // block size: 64, key size: 64, padding: ISO10126, feedback: 8
+                       { 1077937416, "14-FB-AE-82-D0-19-6F-1D" },
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 72, padding: PKCS7, feedback: 8
+                       { 1078460936, "7E-BC-54-EF-A3-24-49-16" },
+                       // block size: 64, key size: 72, padding: Zeros, feedback: 8
+                       { 1078461192, "7E-BB-E3-35-54-06-5B-E4" },
+                       // block size: 64, key size: 72, padding: ANSIX923, feedback: 8
+                       { 1078461448, "7E-BB-E3-35-54-06-5B-E3" },
+                       // block size: 64, key size: 72, padding: ISO10126, feedback: 8
+                       { 1078461704, "7E-1D-43-1C-9A-92-07-BD" },
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 80, padding: PKCS7, feedback: 8
+                       { 1078985224, "D5-15-A2-A6-64-90-AA-E0" },
+                       // block size: 64, key size: 80, padding: Zeros, feedback: 8
+                       { 1078985480, "D5-12-CA-68-08-80-BF-9A" },
+                       // block size: 64, key size: 80, padding: ANSIX923, feedback: 8
+                       { 1078985736, "D5-12-CA-68-08-80-BF-9D" },
+                       // block size: 64, key size: 80, padding: ISO10126, feedback: 8
+                       { 1078985992, "D5-3F-2F-2D-4E-5F-74-D4" },
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 88, padding: PKCS7, feedback: 8
+                       { 1079509512, "65-D3-D6-A7-50-E1-08-40" },
+                       // block size: 64, key size: 88, padding: Zeros, feedback: 8
+                       { 1079509768, "65-D4-55-EF-48-D3-F9-D1" },
+                       // block size: 64, key size: 88, padding: ANSIX923, feedback: 8
+                       { 1079510024, "65-D4-55-EF-48-D3-F9-D6" },
+                       // block size: 64, key size: 88, padding: ISO10126, feedback: 8
+                       { 1079510280, "65-E0-13-D5-55-8A-47-F8" },
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 96, padding: PKCS7, feedback: 8
+                       { 1080033800, "9F-45-33-EB-04-82-11-32" },
+                       // block size: 64, key size: 96, padding: Zeros, feedback: 8
+                       { 1080034056, "9F-42-40-E4-97-D4-86-EA" },
+                       // block size: 64, key size: 96, padding: ANSIX923, feedback: 8
+                       { 1080034312, "9F-42-40-E4-97-D4-86-ED" },
+                       // block size: 64, key size: 96, padding: ISO10126, feedback: 8
+                       { 1080034568, "9F-1A-3A-46-7C-73-7D-58" },
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 104, padding: PKCS7, feedback: 8
+                       { 1080558088, "57-FC-F7-61-8A-3C-BC-9F" },
+                       // block size: 64, key size: 104, padding: Zeros, feedback: 8
+                       { 1080558344, "57-FB-71-C9-C6-5C-08-D1" },
+                       // block size: 64, key size: 104, padding: ANSIX923, feedback: 8
+                       { 1080558600, "57-FB-71-C9-C6-5C-08-D6" },
+                       // block size: 64, key size: 104, padding: ISO10126, feedback: 8
+                       { 1080558856, "57-10-94-F8-51-B5-98-5D" },
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 112, padding: PKCS7, feedback: 8
+                       { 1081082376, "AE-21-D0-F5-89-E3-80-1E" },
+                       // block size: 64, key size: 112, padding: Zeros, feedback: 8
+                       { 1081082632, "AE-26-C6-2E-05-FA-AF-68" },
+                       // block size: 64, key size: 112, padding: ANSIX923, feedback: 8
+                       { 1081082888, "AE-26-C6-2E-05-FA-AF-6F" },
+                       // block size: 64, key size: 112, padding: ISO10126, feedback: 8
+                       { 1081083144, "AE-4D-6F-DE-06-5F-40-71" },
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 120, padding: PKCS7, feedback: 8
+                       { 1081606664, "22-63-22-B7-1F-5A-75-DB" },
+                       // block size: 64, key size: 120, padding: Zeros, feedback: 8
+                       { 1081606920, "22-64-0F-2B-17-29-20-E7" },
+                       // block size: 64, key size: 120, padding: ANSIX923, feedback: 8
+                       { 1081607176, "22-64-0F-2B-17-29-20-E0" },
+                       // block size: 64, key size: 120, padding: ISO10126, feedback: 8
+                       { 1081607432, "22-C9-FD-42-71-DF-E1-E8" },
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 128, padding: PKCS7, feedback: 8
+                       { 1082130952, "7E-00-0A-7E-E1-52-24-2F" },
+                       // block size: 64, key size: 128, padding: Zeros, feedback: 8
+                       { 1082131208, "7E-07-99-69-E5-4E-3D-7D" },
+                       // block size: 64, key size: 128, padding: ANSIX923, feedback: 8
+                       { 1082131464, "7E-07-99-69-E5-4E-3D-7A" },
+                       // block size: 64, key size: 128, padding: ISO10126, feedback: 8
+                       { 1082131720, "7E-B2-6D-A9-60-A9-CC-05" },
+               };
+               
+               protected override string GetExpectedResult (SymmetricAlgorithm algo, byte [] encryptedData)
+               {
+#if false
+                       return base.GetExpectedResult (algo, encryptedData);
+#else
+                       return test_vectors [GetId (algo)];
+#endif
+               }
+       }
+}
\ No newline at end of file
diff --git a/mcs/class/corlib/Test/System.Security.Cryptography/RijndaelCfbTest.cs b/mcs/class/corlib/Test/System.Security.Cryptography/RijndaelCfbTest.cs
new file mode 100644 (file)
index 0000000..b63d2cc
--- /dev/null
@@ -0,0 +1,2253 @@
+//
+// RijndaelManaged CFB Unit Tests 
+//
+// Author:
+//     Sebastien Pouliot  <sebastien@xamarin.com>
+//
+// Copyright (C) 2013 Xamarin Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Security.Cryptography;
+
+using NUnit.Framework;
+
+namespace MonoTests.System.Security.Cryptography {
+       
+       [TestFixture]
+       public class RijndaelCfbTests : CfbTests {
+
+               protected override SymmetricAlgorithm GetInstance ()
+               {
+                       return Rijndael.Create ();
+               }
+
+               [Test]
+               public void Roundtrip ()
+               {
+                       var aes = GetInstance ();
+                       Assert.AreEqual (128, aes.FeedbackSize, "FeedbackSize");
+                       ProcessBlockSizes (aes);
+               }
+
+               // all *CryptoServiceProvider implementation refuse Padding.None
+               // but RijndaelManaged treats it like Padding.Zeros
+               //static PaddingMode[] all_padding_modes = new [] { PaddingMode.None, PaddingMode.PKCS7, PaddingMode.Zeros, PaddingMode.ANSIX923, PaddingMode.ISO10126 };
+               // FIXME: RijndaelManaged CFB is incompatible with other CFB modes, currently mono only supports None and Zeros
+               static PaddingMode[] all_padding_modes = new [] { PaddingMode.None, PaddingMode.Zeros, PaddingMode.ISO10126 };
+
+               protected override PaddingMode [] PaddingModes {
+                       get { return all_padding_modes; }
+               }
+
+               // unlike the other ciphers CFB is supported from 8 to BlockSize
+               // maybe because it was the only managed implementation in th eoriginal framework ?!?
+               protected override void CFB (SymmetricAlgorithm algo)
+               {
+                       algo.Mode = CipherMode.CFB;
+                       // FIXME: mono currently only support CFB8 for RijndaelManaged
+                       for (int i = 8; i <= 8 /*algo.BlockSize*/; i += 8) {
+                               algo.FeedbackSize = i;
+                               CFB (algo, i);
+                       }
+               }
+               
+               // the ICryptoTransform returned by RijndaelManaged do not bbehave like the rest of the framework
+               protected override int GetTransformBlockSize (SymmetricAlgorithm algo)
+               {
+                       return algo.FeedbackSize / 8;
+               }
+               
+               protected override string GetExpectedResult (SymmetricAlgorithm algo, byte [] encryptedData)
+               {
+#if false
+                       return base.GetExpectedResult (algo, encryptedData);
+#else
+                       return test_vectors [GetId (algo)];
+#endif
+               }
+               
+               static Dictionary<int, string> test_vectors = new Dictionary<int, string> () {
+                       // block size: 128, key size: 128, padding: None, feedback: 8
+                       { -2139094776, "99" },
+                       // block size: 128, key size: 128, padding: None, feedback: 16
+                       { -2139094768, "99-17" },
+                       // block size: 128, key size: 128, padding: None, feedback: 24
+                       { -2139094760, "99-17-B6" },
+                       // block size: 128, key size: 128, padding: None, feedback: 32
+                       { -2139094752, "99-17-B6-28" },
+                       // block size: 128, key size: 128, padding: None, feedback: 40
+                       { -2139094744, "99-17-B6-28-14" },
+                       // block size: 128, key size: 128, padding: None, feedback: 48
+                       { -2139094736, "99-17-B6-28-14-70" },
+                       // block size: 128, key size: 128, padding: None, feedback: 56
+                       { -2139094728, "99-17-B6-28-14-70-D5" },
+                       // block size: 128, key size: 128, padding: None, feedback: 64
+                       { -2139094720, "99-17-B6-28-14-70-D5-C3" },
+                       // block size: 128, key size: 128, padding: None, feedback: 72
+                       { -2139094712, "99-17-B6-28-14-70-D5-C3-7F" },
+                       // block size: 128, key size: 128, padding: None, feedback: 80
+                       { -2139094704, "99-17-B6-28-14-70-D5-C3-7F-BA" },
+                       // block size: 128, key size: 128, padding: None, feedback: 88
+                       { -2139094696, "99-17-B6-28-14-70-D5-C3-7F-BA-0F" },
+                       // block size: 128, key size: 128, padding: None, feedback: 96
+                       { -2139094688, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD" },
+                       // block size: 128, key size: 128, padding: None, feedback: 104
+                       { -2139094680, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39" },
+                       // block size: 128, key size: 128, padding: None, feedback: 112
+                       { -2139094672, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6" },
+                       // block size: 128, key size: 128, padding: None, feedback: 120
+                       { -2139094664, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6-DA" },
+                       // block size: 128, key size: 128, padding: None, feedback: 128
+                       { -2139094656, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6-DA-DE" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 8
+                       { -2139094520, "99-67" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 16
+                       { -2139094512, "99-17-02-C9" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 24
+                       { -2139094504, "99-17-B6-55-B7-D6" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 32
+                       { -2139094496, "99-17-B6-28-7E-F3-45-8A" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 40
+                       { -2139094488, "99-17-B6-28-14-16-51-E5-D6-B4" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 48
+                       { -2139094480, "99-17-B6-28-14-70-04-B5-5F-15-91-70" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 56
+                       { -2139094472, "99-17-B6-28-14-70-D5-B8-03-99-DC-CE-58-69" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 64
+                       { -2139094464, "99-17-B6-28-14-70-D5-C3-60-DA-04-D9-68-82-F6-F2" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 72
+                       { -2139094456, "99-17-B6-28-14-70-D5-C3-7F-A9-38-68-AE-F2-E1-A3-85-6A" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 80
+                       { -2139094448, "99-17-B6-28-14-70-D5-C3-7F-BA-0E-CB-7F-93-EF-9F-C4-02-0B-AE" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 88
+                       { -2139094440, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-DA-86-18-46-7F-39-96-E0-40-0D-78" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 96
+                       { -2139094432, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-B0-CB-DB-F1-29-4B-8D-8D-2C-D0-BB-48" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 104
+                       { -2139094424, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-40-09-85-69-CC-F5-10-EF-AF-A3-D8-9A-65" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 112
+                       { -2139094416, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6-10-28-77-22-43-0D-4B-7C-B0-9F-4B-49-A0-82" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 120
+                       { -2139094408, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6-DA-42-07-D8-D5-10-22-5A-7A-FF-16-F2-C3-4E-DE-54" },
+                       // block size: 128, key size: 128, padding: PKCS7, feedback: 128
+                       { -2139094400, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6-DA-DE-B2-F4-C7-44-49-E6-0B-30-3E-62-07-00-DF-61-80-8E" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 8
+                       { -2139094264, "99" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 16
+                       { -2139094256, "99-17" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 24
+                       { -2139094248, "99-17-B6" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 32
+                       { -2139094240, "99-17-B6-28" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 40
+                       { -2139094232, "99-17-B6-28-14" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 48
+                       { -2139094224, "99-17-B6-28-14-70" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 56
+                       { -2139094216, "99-17-B6-28-14-70-D5" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 64
+                       { -2139094208, "99-17-B6-28-14-70-D5-C3" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 72
+                       { -2139094200, "99-17-B6-28-14-70-D5-C3-7F" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 80
+                       { -2139094192, "99-17-B6-28-14-70-D5-C3-7F-BA" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 88
+                       { -2139094184, "99-17-B6-28-14-70-D5-C3-7F-BA-0F" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 96
+                       { -2139094176, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 104
+                       { -2139094168, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 112
+                       { -2139094160, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 120
+                       { -2139094152, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6-DA" },
+                       // block size: 128, key size: 128, padding: Zeros, feedback: 128
+                       { -2139094144, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6-DA-DE" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 8
+                       { -2139094008, "99-67" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 16
+                       { -2139094000, "99-17-00-C9" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 24
+                       { -2139093992, "99-17-B6-56-B4-D6" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 32
+                       { -2139093984, "99-17-B6-28-7A-F7-41-8A" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 40
+                       { -2139093976, "99-17-B6-28-14-13-54-E0-D3-B4" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 48
+                       { -2139093968, "99-17-B6-28-14-70-02-B3-59-13-97-70" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 56
+                       { -2139093960, "99-17-B6-28-14-70-D5-BF-04-9E-DB-C9-5F-69" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 64
+                       { -2139093952, "99-17-B6-28-14-70-D5-C3-68-D2-0C-D1-60-8A-FE-F2" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 72
+                       { -2139093944, "99-17-B6-28-14-70-D5-C3-7F-A0-31-61-A7-FB-E8-AA-8C-6A" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 80
+                       { -2139093936, "99-17-B6-28-14-70-D5-C3-7F-BA-04-C1-75-99-E5-95-CE-08-01-AE" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 88
+                       { -2139093928, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-D1-8D-13-4D-74-32-9D-EB-4B-06-78" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 96
+                       { -2139093920, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-BC-C7-D7-FD-25-47-81-81-20-DC-B7-48" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 104
+                       { -2139093912, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-4D-04-88-64-C1-F8-1D-E2-A2-AE-D5-97-65" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 112
+                       { -2139093904, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6-1E-26-79-2C-4D-03-45-72-BE-91-45-47-AE-82" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 120
+                       { -2139093896, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6-DA-4D-08-D7-DA-1F-2D-55-75-F0-19-FD-CC-41-D1-54" },
+                       // block size: 128, key size: 128, padding: ANSIX923, feedback: 128
+                       { -2139093888, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6-DA-DE-A2-E4-D7-54-59-F6-1B-20-2E-72-17-10-CF-71-90-8E" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 8
+                       { -2139093752, "99-67" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 16
+                       { -2139093744, "99-17-4A-C9" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 24
+                       { -2139093736, "99-17-B6-46-A0-D6" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 32
+                       { -2139093728, "99-17-B6-28-1F-8C-7C-8A" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 40
+                       { -2139093720, "99-17-B6-28-14-88-0E-B8-56-B4" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 48
+                       { -2139093712, "99-17-B6-28-14-70-7C-46-6E-84-B3-70" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 56
+                       { -2139093704, "99-17-B6-28-14-70-D5-85-55-D0-11-34-C2-69" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 64
+                       { -2139093696, "99-17-B6-28-14-70-D5-C3-85-4E-39-EB-26-DE-24-F2" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 72
+                       { -2139093688, "99-17-B6-28-14-70-D5-C3-7F-E5-6E-F0-D8-71-56-31-71-6A" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 80
+                       { -2139093680, "99-17-B6-28-14-70-D5-C3-7F-BA-48-DB-3C-85-E2-0C-E1-C4-FA-AE" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 88
+                       { -2139093672, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-BF-46-E3-78-D6-A7-D9-A8-FF-69-78" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 96
+                       { -2139093664, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-8C-09-27-1D-25-09-82-E6-75-9D-D1-48" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 104
+                       { -2139093656, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-01-21-5D-1C-E5-4C-B9-96-46-D5-4B-FD-65" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 112
+                       { -2139093648, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6-BB-11-A0-98-9D-98-73-54-79-D7-C5-7A-E3-82" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 120
+                       { -2139093640, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6-DA-9A-BB-7F-69-E8-B6-05-59-D8-FB-AC-EC-DC-1D-54" },
+                       // block size: 128, key size: 128, padding: ISO10126, feedback: 128
+                       { -2139093632, "99-17-B6-28-14-70-D5-C3-7F-BA-0F-AD-39-C6-DA-DE-DF-46-3B-3D-32-25-85-BD-18-F8-1A-03-77-EA-80-8E" },
+                       // block size: 128, key size: 192, padding: None, feedback: 8
+                       { -2134900472, "55" },
+                       // block size: 128, key size: 192, padding: None, feedback: 16
+                       { -2134900464, "55-1E" },
+                       // block size: 128, key size: 192, padding: None, feedback: 24
+                       { -2134900456, "55-1E-94" },
+                       // block size: 128, key size: 192, padding: None, feedback: 32
+                       { -2134900448, "55-1E-94-6E" },
+                       // block size: 128, key size: 192, padding: None, feedback: 40
+                       { -2134900440, "55-1E-94-6E-57" },
+                       // block size: 128, key size: 192, padding: None, feedback: 48
+                       { -2134900432, "55-1E-94-6E-57-45" },
+                       // block size: 128, key size: 192, padding: None, feedback: 56
+                       { -2134900424, "55-1E-94-6E-57-45-AB" },
+                       // block size: 128, key size: 192, padding: None, feedback: 64
+                       { -2134900416, "55-1E-94-6E-57-45-AB-5B" },
+                       // block size: 128, key size: 192, padding: None, feedback: 72
+                       { -2134900408, "55-1E-94-6E-57-45-AB-5B-1F" },
+                       // block size: 128, key size: 192, padding: None, feedback: 80
+                       { -2134900400, "55-1E-94-6E-57-45-AB-5B-1F-02" },
+                       // block size: 128, key size: 192, padding: None, feedback: 88
+                       { -2134900392, "55-1E-94-6E-57-45-AB-5B-1F-02-5C" },
+                       // block size: 128, key size: 192, padding: None, feedback: 96
+                       { -2134900384, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A" },
+                       // block size: 128, key size: 192, padding: None, feedback: 104
+                       { -2134900376, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A" },
+                       // block size: 128, key size: 192, padding: None, feedback: 112
+                       { -2134900368, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2" },
+                       // block size: 128, key size: 192, padding: None, feedback: 120
+                       { -2134900360, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2-FA" },
+                       // block size: 128, key size: 192, padding: None, feedback: 128
+                       { -2134900352, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2-FA-27" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 8
+                       { -2134900216, "55-10" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 16
+                       { -2134900208, "55-1E-18-51" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 24
+                       { -2134900200, "55-1E-94-BC-8A-49" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 32
+                       { -2134900192, "55-1E-94-6E-66-F8-AE-CA" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 40
+                       { -2134900184, "55-1E-94-6E-57-F5-1E-F6-31-6C" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 48
+                       { -2134900176, "55-1E-94-6E-57-45-FF-2D-66-AA-7E-CB" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 56
+                       { -2134900168, "55-1E-94-6E-57-45-AB-82-F5-BB-97-67-87-B7" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 64
+                       { -2134900160, "55-1E-94-6E-57-45-AB-5B-91-41-F0-06-67-C3-DF-93" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 72
+                       { -2134900152, "55-1E-94-6E-57-45-AB-5B-1F-BF-A4-52-BB-F4-36-2C-33-D5" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 80
+                       { -2134900144, "55-1E-94-6E-57-45-AB-5B-1F-02-6C-4F-F8-F5-77-F2-55-1D-AB-87" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 88
+                       { -2134900136, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-76-39-3E-B8-9B-00-1B-70-80-EE-A5" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 96
+                       { -2134900128, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-7F-73-DF-B8-DA-17-95-11-39-61-89-F7" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 104
+                       { -2134900120, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-24-C9-1A-2A-80-3A-D8-76-F5-90-06-40-67" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 112
+                       { -2134900112, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2-EA-D6-F2-8E-18-3C-16-4F-BE-38-82-35-0A-CA" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 120
+                       { -2134900104, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2-FA-88-C0-1B-49-FA-0D-00-F7-0B-05-CF-C8-66-6E-EC" },
+                       // block size: 128, key size: 192, padding: PKCS7, feedback: 128
+                       { -2134900096, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2-FA-27-97-AB-F5-1B-D5-57-10-32-FC-83-FE-2E-D9-D3-EE-B3" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 8
+                       { -2134899960, "55" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 16
+                       { -2134899952, "55-1E" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 24
+                       { -2134899944, "55-1E-94" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 32
+                       { -2134899936, "55-1E-94-6E" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 40
+                       { -2134899928, "55-1E-94-6E-57" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 48
+                       { -2134899920, "55-1E-94-6E-57-45" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 56
+                       { -2134899912, "55-1E-94-6E-57-45-AB" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 64
+                       { -2134899904, "55-1E-94-6E-57-45-AB-5B" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 72
+                       { -2134899896, "55-1E-94-6E-57-45-AB-5B-1F" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 80
+                       { -2134899888, "55-1E-94-6E-57-45-AB-5B-1F-02" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 88
+                       { -2134899880, "55-1E-94-6E-57-45-AB-5B-1F-02-5C" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 96
+                       { -2134899872, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 104
+                       { -2134899864, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 112
+                       { -2134899856, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 120
+                       { -2134899848, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2-FA" },
+                       // block size: 128, key size: 192, padding: Zeros, feedback: 128
+                       { -2134899840, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2-FA-27" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 8
+                       { -2134899704, "55-10" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 16
+                       { -2134899696, "55-1E-1A-51" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 24
+                       { -2134899688, "55-1E-94-BF-89-49" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 32
+                       { -2134899680, "55-1E-94-6E-62-FC-AA-CA" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 40
+                       { -2134899672, "55-1E-94-6E-57-F0-1B-F3-34-6C" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 48
+                       { -2134899664, "55-1E-94-6E-57-45-F9-2B-60-AC-78-CB" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 56
+                       { -2134899656, "55-1E-94-6E-57-45-AB-85-F2-BC-90-60-80-B7" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 64
+                       { -2134899648, "55-1E-94-6E-57-45-AB-5B-99-49-F8-0E-6F-CB-D7-93" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 72
+                       { -2134899640, "55-1E-94-6E-57-45-AB-5B-1F-B6-AD-5B-B2-FD-3F-25-3A-D5" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 80
+                       { -2134899632, "55-1E-94-6E-57-45-AB-5B-1F-02-66-45-F2-FF-7D-F8-5F-17-A1-87" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 88
+                       { -2134899624, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-7D-32-35-B3-90-0B-10-7B-8B-E5-A5" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 96
+                       { -2134899616, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-73-7F-D3-B4-D6-1B-99-1D-35-6D-85-F7" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 104
+                       { -2134899608, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-29-C4-17-27-8D-37-D5-7B-F8-9D-0B-4D-67" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 112
+                       { -2134899600, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2-E4-D8-FC-80-16-32-18-41-B0-36-8C-3B-04-CA" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 120
+                       { -2134899592, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2-FA-87-CF-14-46-F5-02-0F-F8-04-0A-C0-C7-69-61-EC" },
+                       // block size: 128, key size: 192, padding: ANSIX923, feedback: 128
+                       { -2134899584, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2-FA-27-87-BB-E5-0B-C5-47-00-22-EC-93-EE-3E-C9-C3-FE-B3" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 8
+                       { -2134899448, "55-10" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 16
+                       { -2134899440, "55-1E-B1-51" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 24
+                       { -2134899432, "55-1E-94-E4-37-49" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 32
+                       { -2134899424, "55-1E-94-6E-9B-EF-03-CA" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 40
+                       { -2134899416, "55-1E-94-6E-57-74-19-94-44-6C" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 48
+                       { -2134899408, "55-1E-94-6E-57-45-CA-8C-78-A0-02-CB" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 56
+                       { -2134899400, "55-1E-94-6E-57-45-AB-66-75-65-B0-C6-B2-B7" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 64
+                       { -2134899392, "55-1E-94-6E-57-45-AB-5B-49-03-E4-0F-F1-4F-75-93" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 72
+                       { -2134899384, "55-1E-94-6E-57-45-AB-5B-1F-88-54-54-E5-03-33-32-5C-D5" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 80
+                       { -2134899376, "55-1E-94-6E-57-45-AB-5B-1F-02-93-71-19-31-49-67-24-65-AD-87" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 88
+                       { -2134899368, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-07-AA-77-C9-96-2E-22-2E-8D-DE-A5" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 96
+                       { -2134899360, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-27-C4-C9-10-18-4C-1B-96-91-68-09-F7" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 104
+                       { -2134899352, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-77-99-91-CE-8B-BA-08-9F-7A-AF-07-D6-67" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 112
+                       { -2134899344, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2-EE-3C-70-18-F1-7E-32-3D-93-45-6F-06-BC-CA" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 120
+                       { -2134899336, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2-FA-57-45-7D-1B-F4-65-31-62-7B-72-12-69-81-C4-EC" },
+                       // block size: 128, key size: 192, padding: ISO10126, feedback: 128
+                       { -2134899328, "55-1E-94-6E-57-45-AB-5B-1F-02-5C-9A-3A-C2-FA-27-17-DE-64-F7-B8-F7-BD-08-DB-17-80-4B-CA-73-56-B3" },
+                       // block size: 128, key size: 256, padding: None, feedback: 8
+                       { -2130706168, "23" },
+                       // block size: 128, key size: 256, padding: None, feedback: 16
+                       { -2130706160, "23-6B" },
+                       // block size: 128, key size: 256, padding: None, feedback: 24
+                       { -2130706152, "23-6B-3D" },
+                       // block size: 128, key size: 256, padding: None, feedback: 32
+                       { -2130706144, "23-6B-3D-84" },
+                       // block size: 128, key size: 256, padding: None, feedback: 40
+                       { -2130706136, "23-6B-3D-84-59" },
+                       // block size: 128, key size: 256, padding: None, feedback: 48
+                       { -2130706128, "23-6B-3D-84-59-BA" },
+                       // block size: 128, key size: 256, padding: None, feedback: 56
+                       { -2130706120, "23-6B-3D-84-59-BA-70" },
+                       // block size: 128, key size: 256, padding: None, feedback: 64
+                       { -2130706112, "23-6B-3D-84-59-BA-70-71" },
+                       // block size: 128, key size: 256, padding: None, feedback: 72
+                       { -2130706104, "23-6B-3D-84-59-BA-70-71-5A" },
+                       // block size: 128, key size: 256, padding: None, feedback: 80
+                       { -2130706096, "23-6B-3D-84-59-BA-70-71-5A-BE" },
+                       // block size: 128, key size: 256, padding: None, feedback: 88
+                       { -2130706088, "23-6B-3D-84-59-BA-70-71-5A-BE-57" },
+                       // block size: 128, key size: 256, padding: None, feedback: 96
+                       { -2130706080, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0" },
+                       // block size: 128, key size: 256, padding: None, feedback: 104
+                       { -2130706072, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61" },
+                       // block size: 128, key size: 256, padding: None, feedback: 112
+                       { -2130706064, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76" },
+                       // block size: 128, key size: 256, padding: None, feedback: 120
+                       { -2130706056, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76-D1" },
+                       // block size: 128, key size: 256, padding: None, feedback: 128
+                       { -2130706048, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76-D1-77" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 8
+                       { -2130705912, "23-D7" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 16
+                       { -2130705904, "23-6B-63-19" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 24
+                       { -2130705896, "23-6B-3D-2E-EB-ED" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 32
+                       { -2130705888, "23-6B-3D-84-59-96-6E-D5" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 40
+                       { -2130705880, "23-6B-3D-84-59-6A-16-24-B5-6B" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 48
+                       { -2130705872, "23-6B-3D-84-59-BA-FC-77-85-57-8B-1F" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 56
+                       { -2130705864, "23-6B-3D-84-59-BA-70-AB-5F-2B-90-86-DB-2E" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 64
+                       { -2130705856, "23-6B-3D-84-59-BA-70-71-FC-79-4D-59-35-F7-00-BB" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 72
+                       { -2130705848, "23-6B-3D-84-59-BA-70-71-5A-DA-58-CD-4D-00-36-70-4E-E4" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 80
+                       { -2130705840, "23-6B-3D-84-59-BA-70-71-5A-BE-C7-39-35-7C-F5-24-4D-9C-DC-38" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 88
+                       { -2130705832, "23-6B-3D-84-59-BA-70-71-5A-BE-57-69-73-64-5E-4D-53-35-75-F9-21-81" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 96
+                       { -2130705824, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-6C-24-B4-8B-C0-D7-4E-B7-03-06-67-AB" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 104
+                       { -2130705816, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-F7-16-F5-1B-43-CF-5B-0A-59-14-C9-CC-B0" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 112
+                       { -2130705808, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76-38-92-CF-4A-AB-2E-87-18-E0-CB-37-4A-E7-5E" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 120
+                       { -2130705800, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76-D1-15-D1-72-05-96-75-AF-76-9D-72-1A-CA-F0-B2-85" },
+                       // block size: 128, key size: 256, padding: PKCS7, feedback: 128
+                       { -2130705792, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76-D1-77-0D-3D-2D-FD-F3-DA-1D-F6-5A-79-C0-20-39-54-DB-4E" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 8
+                       { -2130705656, "23" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 16
+                       { -2130705648, "23-6B" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 24
+                       { -2130705640, "23-6B-3D" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 32
+                       { -2130705632, "23-6B-3D-84" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 40
+                       { -2130705624, "23-6B-3D-84-59" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 48
+                       { -2130705616, "23-6B-3D-84-59-BA" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 56
+                       { -2130705608, "23-6B-3D-84-59-BA-70" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 64
+                       { -2130705600, "23-6B-3D-84-59-BA-70-71" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 72
+                       { -2130705592, "23-6B-3D-84-59-BA-70-71-5A" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 80
+                       { -2130705584, "23-6B-3D-84-59-BA-70-71-5A-BE" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 88
+                       { -2130705576, "23-6B-3D-84-59-BA-70-71-5A-BE-57" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 96
+                       { -2130705568, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 104
+                       { -2130705560, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 112
+                       { -2130705552, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 120
+                       { -2130705544, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76-D1" },
+                       // block size: 128, key size: 256, padding: Zeros, feedback: 128
+                       { -2130705536, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76-D1-77" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 8
+                       { -2130705400, "23-D7" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 16
+                       { -2130705392, "23-6B-61-19" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 24
+                       { -2130705384, "23-6B-3D-2D-E8-ED" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 32
+                       { -2130705376, "23-6B-3D-84-5D-92-6A-D5" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 40
+                       { -2130705368, "23-6B-3D-84-59-6F-13-21-B0-6B" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 48
+                       { -2130705360, "23-6B-3D-84-59-BA-FA-71-83-51-8D-1F" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 56
+                       { -2130705352, "23-6B-3D-84-59-BA-70-AC-58-2C-97-81-DC-2E" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 64
+                       { -2130705344, "23-6B-3D-84-59-BA-70-71-F4-71-45-51-3D-FF-08-BB" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 72
+                       { -2130705336, "23-6B-3D-84-59-BA-70-71-5A-D3-51-C4-44-09-3F-79-47-E4" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 80
+                       { -2130705328, "23-6B-3D-84-59-BA-70-71-5A-BE-CD-33-3F-76-FF-2E-47-96-D6-38" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 88
+                       { -2130705320, "23-6B-3D-84-59-BA-70-71-5A-BE-57-62-78-6F-55-46-58-3E-7E-F2-2A-81" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 96
+                       { -2130705312, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-60-28-B8-87-CC-DB-42-BB-0F-0A-6B-AB" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 104
+                       { -2130705304, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-FA-1B-F8-16-4E-C2-56-07-54-19-C4-C1-B0" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 112
+                       { -2130705296, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76-36-9C-C1-44-A5-20-89-16-EE-C5-39-44-E9-5E" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 120
+                       { -2130705288, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76-D1-1A-DE-7D-0A-99-7A-A0-79-92-7D-15-C5-FF-BD-85" },
+                       // block size: 128, key size: 256, padding: ANSIX923, feedback: 128
+                       { -2130705280, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76-D1-77-1D-2D-3D-ED-E3-CA-0D-E6-4A-69-D0-30-29-44-CB-4E" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 8
+                       { -2130705144, "23-D7" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 16
+                       { -2130705136, "23-6B-8C-19" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 24
+                       { -2130705128, "23-6B-3D-B6-84-ED" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 32
+                       { -2130705120, "23-6B-3D-84-83-51-BF-D5" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 40
+                       { -2130705112, "23-6B-3D-84-59-59-16-74-49-6B" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 48
+                       { -2130705104, "23-6B-3D-84-59-BA-F3-EA-8C-22-0F-1F" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 56
+                       { -2130705096, "23-6B-3D-84-59-BA-70-79-E1-C4-8D-3A-C7-2E" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 64
+                       { -2130705088, "23-6B-3D-84-59-BA-70-71-36-C0-AC-52-76-3A-3E-BB" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 72
+                       { -2130705080, "23-6B-3D-84-59-BA-70-71-5A-77-CC-F8-0B-BD-D4-EB-BD-E4" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 80
+                       { -2130705072, "23-6B-3D-84-59-BA-70-71-5A-BE-F0-65-7E-26-E6-C6-30-DC-0B-38" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 88
+                       { -2130705064, "23-6B-3D-84-59-BA-70-71-5A-BE-57-96-A1-88-12-60-E4-14-CF-D2-A0-81" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 96
+                       { -2130705056, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-A6-12-7F-95-0A-63-E2-28-7A-3D-32-AB" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 104
+                       { -2130705048, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-C5-14-54-72-59-92-7E-20-36-66-E3-58-B0" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 112
+                       { -2130705040, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76-DB-9C-03-8F-0F-1D-E1-5C-47-2E-BA-7C-FF-5E" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 120
+                       { -2130705032, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76-D1-6B-3E-C8-43-9D-1C-79-46-D1-35-2B-F2-01-07-85" },
+                       // block size: 128, key size: 256, padding: ISO10126, feedback: 128
+                       { -2130705024, "23-6B-3D-84-59-BA-70-71-5A-BE-57-E0-61-76-D1-77-53-AD-CD-7F-49-6E-E9-AF-C1-29-05-18-09-B3-D8-4E" },
+                       // block size: 192, key size: 128, padding: None, feedback: 8
+                       { -1065352952, "56" },
+                       // block size: 192, key size: 128, padding: None, feedback: 16
+                       { -1065352944, "56-D9" },
+                       // block size: 192, key size: 128, padding: None, feedback: 24
+                       { -1065352936, "56-D9-CF" },
+                       // block size: 192, key size: 128, padding: None, feedback: 32
+                       { -1065352928, "56-D9-CF-17" },
+                       // block size: 192, key size: 128, padding: None, feedback: 40
+                       { -1065352920, "56-D9-CF-17-B3" },
+                       // block size: 192, key size: 128, padding: None, feedback: 48
+                       { -1065352912, "56-D9-CF-17-B3-77" },
+                       // block size: 192, key size: 128, padding: None, feedback: 56
+                       { -1065352904, "56-D9-CF-17-B3-77-72" },
+                       // block size: 192, key size: 128, padding: None, feedback: 64
+                       { -1065352896, "56-D9-CF-17-B3-77-72-41" },
+                       // block size: 192, key size: 128, padding: None, feedback: 72
+                       { -1065352888, "56-D9-CF-17-B3-77-72-41-79" },
+                       // block size: 192, key size: 128, padding: None, feedback: 80
+                       { -1065352880, "56-D9-CF-17-B3-77-72-41-79-3B" },
+                       // block size: 192, key size: 128, padding: None, feedback: 88
+                       { -1065352872, "56-D9-CF-17-B3-77-72-41-79-3B-78" },
+                       // block size: 192, key size: 128, padding: None, feedback: 96
+                       { -1065352864, "56-D9-CF-17-B3-77-72-41-79-3B-78-61" },
+                       // block size: 192, key size: 128, padding: None, feedback: 104
+                       { -1065352856, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F" },
+                       // block size: 192, key size: 128, padding: None, feedback: 112
+                       { -1065352848, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E" },
+                       // block size: 192, key size: 128, padding: None, feedback: 120
+                       { -1065352840, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3" },
+                       // block size: 192, key size: 128, padding: None, feedback: 128
+                       { -1065352832, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10" },
+                       // block size: 192, key size: 128, padding: None, feedback: 136
+                       { -1065352824, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD" },
+                       // block size: 192, key size: 128, padding: None, feedback: 144
+                       { -1065352816, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C" },
+                       // block size: 192, key size: 128, padding: None, feedback: 152
+                       { -1065352808, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD" },
+                       // block size: 192, key size: 128, padding: None, feedback: 160
+                       { -1065352800, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41" },
+                       // block size: 192, key size: 128, padding: None, feedback: 168
+                       { -1065352792, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD" },
+                       // block size: 192, key size: 128, padding: None, feedback: 176
+                       { -1065352784, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71" },
+                       // block size: 192, key size: 128, padding: None, feedback: 184
+                       { -1065352776, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71-D1" },
+                       // block size: 192, key size: 128, padding: None, feedback: 192
+                       { -1065352768, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71-D1-A1" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 8
+                       { -1065352696, "56-58" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 16
+                       { -1065352688, "56-D9-A3-21" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 24
+                       { -1065352680, "56-D9-CF-29-90-6D" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 32
+                       { -1065352672, "56-D9-CF-17-CB-39-5A-06" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 40
+                       { -1065352664, "56-D9-CF-17-B3-E1-23-9A-CC-90" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 48
+                       { -1065352656, "56-D9-CF-17-B3-77-59-18-0A-A2-5A-92" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 56
+                       { -1065352648, "56-D9-CF-17-B3-77-72-E6-9C-5B-AB-0C-C9-F9" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 64
+                       { -1065352640, "56-D9-CF-17-B3-77-72-41-FB-72-CF-FA-BE-99-9D-00" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 72
+                       { -1065352632, "56-D9-CF-17-B3-77-72-41-79-65-29-24-E8-17-13-12-4D-DA" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 80
+                       { -1065352624, "56-D9-CF-17-B3-77-72-41-79-3B-67-07-D4-A7-65-9A-22-8B-25-76" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 88
+                       { -1065352616, "56-D9-CF-17-B3-77-72-41-79-3B-78-21-5C-69-FF-9C-6C-D3-F6-34-FE-CD" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 96
+                       { -1065352608, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-29-5A-55-87-14-E0-DA-37-AB-AB-15-70" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 104
+                       { -1065352600, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-5B-FA-64-69-37-A7-8E-2D-BA-58-6C-05-63" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 112
+                       { -1065352592, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-46-6D-35-D3-ED-E2-41-71-73-32-C8-FA-5E-A9" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 120
+                       { -1065352584, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-EE-53-9A-49-08-A6-74-85-51-D5-EC-A3-D2-8D-30" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 128
+                       { -1065352576, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-0C-AA-91-24-16-36-B2-E5-8C-39-75-65-6C-98-ED-64" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 136
+                       { -1065352568, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-99-50-C8-E9-2C-E4-B3-13-C7-0C-56-39-29-F1-BD-AB-5B" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 144
+                       { -1065352560, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-AA-FE-C9-F0-80-D9-48-23-95-26-2C-94-EE-DF-5A-95-51-E1" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 152
+                       { -1065352552, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-62-9F-20-64-7C-CE-5A-64-E3-9F-71-5D-D0-83-F8-71-2B-F8-B2" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 160
+                       { -1065352544, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-C9-19-BB-19-13-22-09-2E-28-3A-53-B2-DC-09-60-EC-07-F6-1F-4B" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 168
+                       { -1065352536, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-79-AC-18-57-04-B8-E9-9B-89-74-F1-C3-93-5A-FC-97-C5-5C-3B-55-E6" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 176
+                       { -1065352528, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71-05-08-47-C9-A3-AA-ED-1A-F0-8C-56-E2-3D-AD-9F-44-66-CD-0E-D6-EF-18" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 184
+                       { -1065352520, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71-D1-3A-14-37-E3-29-09-6D-B1-63-2C-F6-63-10-E5-69-9D-F0-49-E9-48-64-81-D0" },
+                       // block size: 192, key size: 128, padding: PKCS7, feedback: 192
+                       { -1065352512, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71-D1-A1-22-E6-DC-F3-96-FD-7D-14-1A-D8-54-E0-04-22-5F-06-F5-A9-8D-F8-AB-13-3E-FE" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 8
+                       { -1065352440, "56" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 16
+                       { -1065352432, "56-D9" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 24
+                       { -1065352424, "56-D9-CF" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 32
+                       { -1065352416, "56-D9-CF-17" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 40
+                       { -1065352408, "56-D9-CF-17-B3" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 48
+                       { -1065352400, "56-D9-CF-17-B3-77" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 56
+                       { -1065352392, "56-D9-CF-17-B3-77-72" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 64
+                       { -1065352384, "56-D9-CF-17-B3-77-72-41" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 72
+                       { -1065352376, "56-D9-CF-17-B3-77-72-41-79" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 80
+                       { -1065352368, "56-D9-CF-17-B3-77-72-41-79-3B" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 88
+                       { -1065352360, "56-D9-CF-17-B3-77-72-41-79-3B-78" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 96
+                       { -1065352352, "56-D9-CF-17-B3-77-72-41-79-3B-78-61" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 104
+                       { -1065352344, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 112
+                       { -1065352336, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 120
+                       { -1065352328, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 128
+                       { -1065352320, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 136
+                       { -1065352312, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 144
+                       { -1065352304, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 152
+                       { -1065352296, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 160
+                       { -1065352288, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 168
+                       { -1065352280, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 176
+                       { -1065352272, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 184
+                       { -1065352264, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71-D1" },
+                       // block size: 192, key size: 128, padding: Zeros, feedback: 192
+                       { -1065352256, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71-D1-A1" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 8
+                       { -1065352184, "56-58" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 16
+                       { -1065352176, "56-D9-A1-21" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 24
+                       { -1065352168, "56-D9-CF-2A-93-6D" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 32
+                       { -1065352160, "56-D9-CF-17-CF-3D-5E-06" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 40
+                       { -1065352152, "56-D9-CF-17-B3-E4-26-9F-C9-90" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 48
+                       { -1065352144, "56-D9-CF-17-B3-77-5F-1E-0C-A4-5C-92" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 56
+                       { -1065352136, "56-D9-CF-17-B3-77-72-E1-9B-5C-AC-0B-CE-F9" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 64
+                       { -1065352128, "56-D9-CF-17-B3-77-72-41-F3-7A-C7-F2-B6-91-95-00" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 72
+                       { -1065352120, "56-D9-CF-17-B3-77-72-41-79-6C-20-2D-E1-1E-1A-1B-44-DA" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 80
+                       { -1065352112, "56-D9-CF-17-B3-77-72-41-79-3B-6D-0D-DE-AD-6F-90-28-81-2F-76" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 88
+                       { -1065352104, "56-D9-CF-17-B3-77-72-41-79-3B-78-2A-57-62-F4-97-67-D8-FD-3F-F5-CD" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 96
+                       { -1065352096, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-25-56-59-8B-18-EC-D6-3B-A7-A7-19-70" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 104
+                       { -1065352088, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-56-F7-69-64-3A-AA-83-20-B7-55-61-08-63" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 112
+                       { -1065352080, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-48-63-3B-DD-E3-EC-4F-7F-7D-3C-C6-F4-50-A9" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 120
+                       { -1065352072, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-E1-5C-95-46-07-A9-7B-8A-5E-DA-E3-AC-DD-82-30" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 128
+                       { -1065352064, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-1C-BA-81-34-06-26-A2-F5-9C-29-65-75-7C-88-FD-64" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 136
+                       { -1065352056, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-88-41-D9-F8-3D-F5-A2-02-D6-1D-47-28-38-E0-AC-BA-5B" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 144
+                       { -1065352048, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-B8-EC-DB-E2-92-CB-5A-31-87-34-3E-86-FC-CD-48-87-43-E1" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 152
+                       { -1065352040, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-71-8C-33-77-6F-DD-49-77-F0-8C-62-4E-C3-90-EB-62-38-EB-B2" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 160
+                       { -1065352032, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-0D-AF-0D-07-36-1D-3A-3C-2E-47-A6-C8-1D-74-F8-13-E2-0B-4B" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 168
+                       { -1065352024, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-6C-B9-0D-42-11-AD-FC-8E-9C-61-E4-D6-86-4F-E9-82-D0-49-2E-40-E6" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 176
+                       { -1065352016, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71-13-1E-51-DF-B5-BC-FB-0C-E6-9A-40-F4-2B-BB-89-52-70-DB-18-C0-F9-18" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 184
+                       { -1065352008, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71-D1-2D-03-20-F4-3E-1E-7A-A6-74-3B-E1-74-07-F2-7E-8A-E7-5E-FE-5F-73-96-D0" },
+                       // block size: 192, key size: 128, padding: ANSIX923, feedback: 192
+                       { -1065352000, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71-D1-A1-3A-FE-C4-EB-8E-E5-65-0C-02-C0-4C-F8-1C-3A-47-1E-ED-B1-95-E0-B3-0B-26-FE" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 8
+                       { -1065351928, "56-58" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 16
+                       { -1065351920, "56-D9-F0-21" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 24
+                       { -1065351912, "56-D9-CF-5D-9F-6D" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 32
+                       { -1065351904, "56-D9-CF-17-36-34-23-06" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 40
+                       { -1065351896, "56-D9-CF-17-B3-B9-76-1A-31-90" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 48
+                       { -1065351888, "56-D9-CF-17-B3-77-F6-2C-C9-61-7D-92" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 56
+                       { -1065351880, "56-D9-CF-17-B3-77-72-1B-05-CB-B4-72-87-F9" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 64
+                       { -1065351872, "56-D9-CF-17-B3-77-72-41-4C-F1-F4-D8-B0-BB-29-00" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 72
+                       { -1065351864, "56-D9-CF-17-B3-77-72-41-79-25-01-58-8B-4F-CA-EB-22-DA" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 80
+                       { -1065351856, "56-D9-CF-17-B3-77-72-41-79-3B-42-86-90-34-20-C0-1D-F1-7A-76" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 88
+                       { -1065351848, "56-D9-CF-17-B3-77-72-41-79-3B-78-EF-82-2B-AD-FA-17-E9-F0-80-89-CD" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 96
+                       { -1065351840, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-06-7C-0F-10-37-7D-D6-63-EF-6D-28-70" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 104
+                       { -1065351832, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-8C-E2-2C-52-3B-27-36-C6-62-D1-A6-91-63" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 112
+                       { -1065351824, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-69-EB-D9-1C-9B-FD-62-9B-58-DF-6B-75-45-A9" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 120
+                       { -1065351816, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-55-C7-03-07-7D-2D-55-12-84-F7-CD-6C-85-AB-30" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 128
+                       { -1065351808, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-5A-E0-C9-18-4F-7C-0A-F5-C0-6D-9E-38-C4-13-11-64" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 136
+                       { -1065351800, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1F-09-EF-7A-60-A7-AF-A5-FF-E1-2C-2F-2E-A4-F9-08-5B" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 144
+                       { -1065351792, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-9C-90-84-28-E2-3E-FB-BB-76-CE-CE-66-83-BC-AB-36-01-E1" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 152
+                       { -1065351784, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-9D-C4-24-FE-3A-F9-12-2B-B2-F3-E2-E3-73-9E-FC-48-0E-87-B2" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 160
+                       { -1065351776, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-39-F4-B6-78-24-43-AE-8F-65-B6-1C-88-60-3A-83-8F-2C-42-10-4B" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 168
+                       { -1065351768, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-F2-07-8C-09-CF-62-25-8D-93-9D-92-49-2D-6F-C7-21-3E-C8-26-ED-E6" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 176
+                       { -1065351760, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71-0F-03-DC-03-F5-D2-48-22-42-9D-98-3A-4A-83-28-32-79-21-50-39-97-18" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 184
+                       { -1065351752, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71-D1-19-FA-75-2B-55-3C-E1-BD-D4-01-08-E9-0D-63-46-53-F3-E1-5F-72-14-4F-D0" },
+                       // block size: 192, key size: 128, padding: ISO10126, feedback: 192
+                       { -1065351744, "56-D9-CF-17-B3-77-72-41-79-3B-78-61-2F-6E-F3-10-BD-1C-BD-41-DD-71-D1-A1-15-EA-B7-A2-E3-5C-7A-FA-CA-96-63-24-CA-40-10-07-F8-76-A3-8F-50-CB-36-FE" },
+                       // block size: 192, key size: 192, padding: None, feedback: 8
+                       { -1061158648, "39" },
+                       // block size: 192, key size: 192, padding: None, feedback: 16
+                       { -1061158640, "39-CA" },
+                       // block size: 192, key size: 192, padding: None, feedback: 24
+                       { -1061158632, "39-CA-76" },
+                       // block size: 192, key size: 192, padding: None, feedback: 32
+                       { -1061158624, "39-CA-76-1E" },
+                       // block size: 192, key size: 192, padding: None, feedback: 40
+                       { -1061158616, "39-CA-76-1E-FB" },
+                       // block size: 192, key size: 192, padding: None, feedback: 48
+                       { -1061158608, "39-CA-76-1E-FB-FD" },
+                       // block size: 192, key size: 192, padding: None, feedback: 56
+                       { -1061158600, "39-CA-76-1E-FB-FD-43" },
+                       // block size: 192, key size: 192, padding: None, feedback: 64
+                       { -1061158592, "39-CA-76-1E-FB-FD-43-3C" },
+                       // block size: 192, key size: 192, padding: None, feedback: 72
+                       { -1061158584, "39-CA-76-1E-FB-FD-43-3C-5F" },
+                       // block size: 192, key size: 192, padding: None, feedback: 80
+                       { -1061158576, "39-CA-76-1E-FB-FD-43-3C-5F-4B" },
+                       // block size: 192, key size: 192, padding: None, feedback: 88
+                       { -1061158568, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97" },
+                       // block size: 192, key size: 192, padding: None, feedback: 96
+                       { -1061158560, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D" },
+                       // block size: 192, key size: 192, padding: None, feedback: 104
+                       { -1061158552, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF" },
+                       // block size: 192, key size: 192, padding: None, feedback: 112
+                       { -1061158544, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73" },
+                       // block size: 192, key size: 192, padding: None, feedback: 120
+                       { -1061158536, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6" },
+                       // block size: 192, key size: 192, padding: None, feedback: 128
+                       { -1061158528, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52" },
+                       // block size: 192, key size: 192, padding: None, feedback: 136
+                       { -1061158520, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC" },
+                       // block size: 192, key size: 192, padding: None, feedback: 144
+                       { -1061158512, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0" },
+                       // block size: 192, key size: 192, padding: None, feedback: 152
+                       { -1061158504, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B" },
+                       // block size: 192, key size: 192, padding: None, feedback: 160
+                       { -1061158496, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2" },
+                       // block size: 192, key size: 192, padding: None, feedback: 168
+                       { -1061158488, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71" },
+                       // block size: 192, key size: 192, padding: None, feedback: 176
+                       { -1061158480, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75" },
+                       // block size: 192, key size: 192, padding: None, feedback: 184
+                       { -1061158472, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75-73" },
+                       // block size: 192, key size: 192, padding: None, feedback: 192
+                       { -1061158464, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75-73-50" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 8
+                       { -1061158392, "39-7D" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 16
+                       { -1061158384, "39-CA-D8-BF" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 24
+                       { -1061158376, "39-CA-76-98-DB-D0" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 32
+                       { -1061158368, "39-CA-76-1E-1F-57-B5-D2" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 40
+                       { -1061158360, "39-CA-76-1E-FB-BD-48-34-BA-32" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 48
+                       { -1061158352, "39-CA-76-1E-FB-FD-B5-E4-27-0D-8C-16" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 56
+                       { -1061158344, "39-CA-76-1E-FB-FD-43-0F-C1-E8-6C-8D-06-88" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 64
+                       { -1061158336, "39-CA-76-1E-FB-FD-43-3C-B6-CA-E9-26-30-5D-67-3C" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 72
+                       { -1061158328, "39-CA-76-1E-FB-FD-43-3C-5F-AA-04-EC-5B-71-C5-3E-AF-FE" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 80
+                       { -1061158320, "39-CA-76-1E-FB-FD-43-3C-5F-4B-C9-96-D0-AB-05-4C-78-31-17-C0" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 88
+                       { -1061158312, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-C3-7F-F9-ED-D0-5E-E0-CB-CA-9C-7A" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 96
+                       { -1061158304, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-10-2A-92-73-28-29-A8-6D-9B-77-A3-A9" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 104
+                       { -1061158296, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-C7-CC-92-6A-D9-34-53-3F-EF-E6-50-7B-A2" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 112
+                       { -1061158288, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-A1-40-AF-66-96-D7-EF-4E-94-92-77-27-35-89" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 120
+                       { -1061158280, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-C8-02-E1-4D-4C-4E-DA-A6-07-3B-C2-5B-2C-BA-62" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 128
+                       { -1061158272, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-D2-0B-AA-AA-58-19-35-DE-7D-08-C0-CE-BF-E8-EC-51" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 136
+                       { -1061158264, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-A7-7D-0B-BA-B1-13-4C-23-95-5E-FA-7D-82-4E-26-E4-75" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 144
+                       { -1061158256, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-E4-7A-2B-65-B4-31-DC-EB-8F-5D-64-4D-C3-7C-B7-C7-F9-26" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 152
+                       { -1061158248, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-77-4F-F8-52-CA-93-89-CD-FE-36-7B-2B-59-CE-F9-97-6A-A0-FE" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 160
+                       { -1061158240, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-3F-25-00-AB-7E-77-79-02-4A-28-56-64-77-DF-EA-EE-F4-BF-EC-10" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 168
+                       { -1061158232, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-00-44-77-16-31-A1-E3-23-4E-49-30-7B-9D-3F-FE-67-D2-EB-EF-96-77" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 176
+                       { -1061158224, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75-8A-B0-B9-6F-F4-51-14-D6-5D-61-6D-64-7B-AC-F3-AD-3B-79-32-AA-B9-CF" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 184
+                       { -1061158216, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75-73-FA-1C-10-C8-54-37-C0-BB-E4-1C-F5-6C-4B-52-89-60-8E-44-CF-D4-9B-36-89" },
+                       // block size: 192, key size: 192, padding: PKCS7, feedback: 192
+                       { -1061158208, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75-73-50-B2-FE-11-81-96-32-D7-98-44-B9-B0-51-22-4F-89-35-79-AE-55-11-0E-72-47-93" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 8
+                       { -1061158136, "39" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 16
+                       { -1061158128, "39-CA" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 24
+                       { -1061158120, "39-CA-76" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 32
+                       { -1061158112, "39-CA-76-1E" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 40
+                       { -1061158104, "39-CA-76-1E-FB" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 48
+                       { -1061158096, "39-CA-76-1E-FB-FD" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 56
+                       { -1061158088, "39-CA-76-1E-FB-FD-43" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 64
+                       { -1061158080, "39-CA-76-1E-FB-FD-43-3C" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 72
+                       { -1061158072, "39-CA-76-1E-FB-FD-43-3C-5F" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 80
+                       { -1061158064, "39-CA-76-1E-FB-FD-43-3C-5F-4B" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 88
+                       { -1061158056, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 96
+                       { -1061158048, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 104
+                       { -1061158040, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 112
+                       { -1061158032, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 120
+                       { -1061158024, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 128
+                       { -1061158016, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 136
+                       { -1061158008, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 144
+                       { -1061158000, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 152
+                       { -1061157992, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 160
+                       { -1061157984, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 168
+                       { -1061157976, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 176
+                       { -1061157968, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 184
+                       { -1061157960, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75-73" },
+                       // block size: 192, key size: 192, padding: Zeros, feedback: 192
+                       { -1061157952, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75-73-50" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 8
+                       { -1061157880, "39-7D" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 16
+                       { -1061157872, "39-CA-DA-BF" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 24
+                       { -1061157864, "39-CA-76-9B-D8-D0" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 32
+                       { -1061157856, "39-CA-76-1E-1B-53-B1-D2" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 40
+                       { -1061157848, "39-CA-76-1E-FB-B8-4D-31-BF-32" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 48
+                       { -1061157840, "39-CA-76-1E-FB-FD-B3-E2-21-0B-8A-16" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 56
+                       { -1061157832, "39-CA-76-1E-FB-FD-43-08-C6-EF-6B-8A-01-88" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 64
+                       { -1061157824, "39-CA-76-1E-FB-FD-43-3C-BE-C2-E1-2E-38-55-6F-3C" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 72
+                       { -1061157816, "39-CA-76-1E-FB-FD-43-3C-5F-A3-0D-E5-52-78-CC-37-A6-FE" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 80
+                       { -1061157808, "39-CA-76-1E-FB-FD-43-3C-5F-4B-C3-9C-DA-A1-0F-46-72-3B-1D-C0" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 88
+                       { -1061157800, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-C8-74-F2-E6-DB-55-EB-C0-C1-97-7A" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 96
+                       { -1061157792, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-1C-26-9E-7F-24-25-A4-61-97-7B-AF-A9" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 104
+                       { -1061157784, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-CA-C1-9F-67-D4-39-5E-32-E2-EB-5D-76-A2" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 112
+                       { -1061157776, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-AF-4E-A1-68-98-D9-E1-40-9A-9C-79-29-3B-89" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 120
+                       { -1061157768, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-C7-0D-EE-42-43-41-D5-A9-08-34-CD-54-23-B5-62" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 128
+                       { -1061157760, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-C2-1B-BA-BA-48-09-25-CE-6D-18-D0-DE-AF-F8-FC-51" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 136
+                       { -1061157752, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-B6-6C-1A-AB-A0-02-5D-32-84-4F-EB-6C-93-5F-37-F5-75" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 144
+                       { -1061157744, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-F6-68-39-77-A6-23-CE-F9-9D-4F-76-5F-D1-6E-A5-D5-EB-26" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 152
+                       { -1061157736, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-64-5C-EB-41-D9-80-9A-DE-ED-25-68-38-4A-DD-EA-84-79-B3-FE" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 160
+                       { -1061157728, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-2B-31-14-BF-6A-63-6D-16-5E-3C-42-70-63-CB-FE-FA-E0-AB-F8-10" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 168
+                       { -1061157720, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-15-51-62-03-24-B4-F6-36-5B-5C-25-6E-88-2A-EB-72-C7-FE-FA-83-77" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 176
+                       { -1061157712, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75-9C-A6-AF-79-E2-47-02-C0-4B-77-7B-72-6D-BA-E5-BB-2D-6F-24-BC-AF-CF" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 184
+                       { -1061157704, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75-73-ED-0B-07-DF-43-20-D7-AC-F3-0B-E2-7B-5C-45-9E-77-99-53-D8-C3-8C-21-89" },
+                       // block size: 192, key size: 192, padding: ANSIX923, feedback: 192
+                       { -1061157696, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75-73-50-AA-E6-09-99-8E-2A-CF-80-5C-A1-A8-49-3A-57-91-2D-61-B6-4D-09-16-6A-5F-93" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 8
+                       { -1061157624, "39-7D" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 16
+                       { -1061157616, "39-CA-1B-BF" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 24
+                       { -1061157608, "39-CA-76-54-71-D0" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 32
+                       { -1061157600, "39-CA-76-1E-88-E4-D5-D2" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 40
+                       { -1061157592, "39-CA-76-1E-FB-68-16-74-7A-32" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 48
+                       { -1061157584, "39-CA-76-1E-FB-FD-C7-82-F7-F9-26-16" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 56
+                       { -1061157576, "39-CA-76-1E-FB-FD-43-51-AC-35-47-37-DE-88" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 64
+                       { -1061157568, "39-CA-76-1E-FB-FD-43-3C-17-05-01-46-FD-9F-A2-3C" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 72
+                       { -1061157560, "39-CA-76-1E-FB-FD-43-3C-5F-45-46-F8-3D-10-F7-D0-29-FE" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 80
+                       { -1061157552, "39-CA-76-1E-FB-FD-43-3C-5F-4B-08-DE-A9-20-1F-A5-49-77-3E-C0" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 88
+                       { -1061157544, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-56-7C-62-8D-0C-1D-59-64-9A-AB-7A" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 96
+                       { -1061157536, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-2B-77-64-50-5F-CD-21-37-29-DC-66-A9" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 104
+                       { -1061157528, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-37-E4-50-E2-2D-ED-F9-C9-35-ED-1A-C0-A2" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 112
+                       { -1061157520, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-6D-FE-99-D1-E8-AC-D7-AD-CA-4F-F3-C9-A9-89" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 120
+                       { -1061157512, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-88-05-AB-B0-D3-98-A9-37-FA-EB-C2-98-02-6D-62" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 128
+                       { -1061157504, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-07-9F-A9-4C-62-78-B5-62-3F-DC-58-84-59-E5-6D-51" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 136
+                       { -1061157496, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-45-EF-0D-23-71-8A-33-0E-15-70-04-55-1D-98-5F-08-75" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 144
+                       { -1061157488, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-B9-FD-FE-EA-CB-29-B7-4E-6B-0D-EC-6B-59-0A-32-6E-10-26" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 152
+                       { -1061157480, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-92-9C-B2-8E-5A-1E-DF-8E-37-86-5D-EF-25-62-33-79-A9-CE-FE" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 160
+                       { -1061157472, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-39-EE-42-8E-F4-73-03-BE-54-69-AC-E4-3D-CA-AF-56-50-3B-15-10" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 168
+                       { -1061157464, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-DA-61-74-22-45-DC-75-D7-3B-DC-7C-9C-FF-A6-1F-E0-B0-9E-82-46-77" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 176
+                       { -1061157456, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75-38-56-C4-D9-BB-15-47-40-F7-A1-5E-4E-3F-33-5E-A0-27-88-7F-42-5C-CF" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 184
+                       { -1061157448, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75-73-7E-40-BA-A6-A9-54-4C-D5-4C-04-01-B3-BC-20-8F-70-36-80-12-43-D5-A3-89" },
+                       // block size: 192, key size: 192, padding: ISO10126, feedback: 192
+                       { -1061157440, "39-CA-76-1E-FB-FD-43-3C-5F-4B-97-7D-FF-73-B6-52-AC-C0-9B-E2-71-75-73-50-A9-33-DF-1D-0E-01-DD-8D-2D-16-32-A0-6B-A2-B8-04-A6-02-F7-1D-24-EF-CD-93" },
+                       // block size: 192, key size: 256, padding: None, feedback: 8
+                       { -1056964344, "E8" },
+                       // block size: 192, key size: 256, padding: None, feedback: 16
+                       { -1056964336, "E8-FE" },
+                       // block size: 192, key size: 256, padding: None, feedback: 24
+                       { -1056964328, "E8-FE-B3" },
+                       // block size: 192, key size: 256, padding: None, feedback: 32
+                       { -1056964320, "E8-FE-B3-7C" },
+                       // block size: 192, key size: 256, padding: None, feedback: 40
+                       { -1056964312, "E8-FE-B3-7C-94" },
+                       // block size: 192, key size: 256, padding: None, feedback: 48
+                       { -1056964304, "E8-FE-B3-7C-94-54" },
+                       // block size: 192, key size: 256, padding: None, feedback: 56
+                       { -1056964296, "E8-FE-B3-7C-94-54-08" },
+                       // block size: 192, key size: 256, padding: None, feedback: 64
+                       { -1056964288, "E8-FE-B3-7C-94-54-08-90" },
+                       // block size: 192, key size: 256, padding: None, feedback: 72
+                       { -1056964280, "E8-FE-B3-7C-94-54-08-90-0B" },
+                       // block size: 192, key size: 256, padding: None, feedback: 80
+                       { -1056964272, "E8-FE-B3-7C-94-54-08-90-0B-6A" },
+                       // block size: 192, key size: 256, padding: None, feedback: 88
+                       { -1056964264, "E8-FE-B3-7C-94-54-08-90-0B-6A-20" },
+                       // block size: 192, key size: 256, padding: None, feedback: 96
+                       { -1056964256, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B" },
+                       // block size: 192, key size: 256, padding: None, feedback: 104
+                       { -1056964248, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B" },
+                       // block size: 192, key size: 256, padding: None, feedback: 112
+                       { -1056964240, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02" },
+                       // block size: 192, key size: 256, padding: None, feedback: 120
+                       { -1056964232, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81" },
+                       // block size: 192, key size: 256, padding: None, feedback: 128
+                       { -1056964224, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68" },
+                       // block size: 192, key size: 256, padding: None, feedback: 136
+                       { -1056964216, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF" },
+                       // block size: 192, key size: 256, padding: None, feedback: 144
+                       { -1056964208, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B" },
+                       // block size: 192, key size: 256, padding: None, feedback: 152
+                       { -1056964200, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A" },
+                       // block size: 192, key size: 256, padding: None, feedback: 160
+                       { -1056964192, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0" },
+                       // block size: 192, key size: 256, padding: None, feedback: 168
+                       { -1056964184, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A" },
+                       // block size: 192, key size: 256, padding: None, feedback: 176
+                       { -1056964176, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8" },
+                       // block size: 192, key size: 256, padding: None, feedback: 184
+                       { -1056964168, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8-50" },
+                       // block size: 192, key size: 256, padding: None, feedback: 192
+                       { -1056964160, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8-50-AD" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 8
+                       { -1056964088, "E8-58" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 16
+                       { -1056964080, "E8-FE-C6-31" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 24
+                       { -1056964072, "E8-FE-B3-CC-A6-61" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 32
+                       { -1056964064, "E8-FE-B3-7C-C1-E5-B6-27" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 40
+                       { -1056964056, "E8-FE-B3-7C-94-99-20-0B-54-6C" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 48
+                       { -1056964048, "E8-FE-B3-7C-94-54-62-37-F3-25-AF-61" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 56
+                       { -1056964040, "E8-FE-B3-7C-94-54-08-B0-B1-34-63-F7-AB-26" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 64
+                       { -1056964032, "E8-FE-B3-7C-94-54-08-90-11-8E-8C-0F-20-A4-66-39" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 72
+                       { -1056964024, "E8-FE-B3-7C-94-54-08-90-0B-E9-8A-4B-E6-60-BF-18-14-79" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 80
+                       { -1056964016, "E8-FE-B3-7C-94-54-08-90-0B-6A-70-0F-85-26-08-CE-E1-7D-90-68" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 88
+                       { -1056964008, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-A2-47-E0-39-9A-87-7F-BD-D1-A5-0D" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 96
+                       { -1056964000, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-05-FA-DC-C2-C0-A3-2A-D8-1A-D5-02-F4" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 104
+                       { -1056963992, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-95-AC-25-17-40-B9-34-EA-C2-8E-89-DF-89" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 112
+                       { -1056963984, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-37-6A-34-FF-A9-8B-C8-66-C1-FC-29-CE-FA-2D" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 120
+                       { -1056963976, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-59-FF-63-D3-27-4F-8C-59-66-09-CF-D8-3C-5B-21" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 128
+                       { -1056963968, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-9A-D7-E4-90-5D-BF-1A-A9-E8-E1-5E-6C-C0-07-1B-AC" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 136
+                       { -1056963960, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-05-25-6A-07-71-2D-39-B7-D3-C5-A7-53-E8-D1-FF-46-EC" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 144
+                       { -1056963952, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-E0-B6-F0-15-C0-3E-A2-DF-C7-EA-40-AA-0D-DB-B0-0E-40-1C" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 152
+                       { -1056963944, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-6A-F4-54-DA-20-07-99-12-BA-92-1A-6A-BD-A3-A5-20-84-D7-3E" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 160
+                       { -1056963936, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-5E-01-E7-B8-9B-EC-42-00-9E-3D-16-12-4E-A9-7E-0F-5B-00-71-DF" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 168
+                       { -1056963928, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-52-DB-A9-21-97-72-DE-97-16-5D-8D-75-AA-62-4E-23-BD-B6-D5-52-AE" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 176
+                       { -1056963920, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8-CA-C2-DE-8D-66-AD-B8-91-FA-55-7D-BF-25-CF-BE-92-A8-CD-52-3D-93-7F" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 184
+                       { -1056963912, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8-50-F3-D7-43-76-09-53-6E-CF-A2-B6-33-A1-1A-6B-4A-F7-C1-16-DF-A9-13-97-DC" },
+                       // block size: 192, key size: 256, padding: PKCS7, feedback: 192
+                       { -1056963904, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8-50-AD-C8-72-5E-D6-76-3D-9D-50-88-A3-5A-8C-0E-FD-31-56-8C-11-BD-90-14-07-58-40" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 8
+                       { -1056963832, "E8" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 16
+                       { -1056963824, "E8-FE" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 24
+                       { -1056963816, "E8-FE-B3" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 32
+                       { -1056963808, "E8-FE-B3-7C" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 40
+                       { -1056963800, "E8-FE-B3-7C-94" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 48
+                       { -1056963792, "E8-FE-B3-7C-94-54" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 56
+                       { -1056963784, "E8-FE-B3-7C-94-54-08" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 64
+                       { -1056963776, "E8-FE-B3-7C-94-54-08-90" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 72
+                       { -1056963768, "E8-FE-B3-7C-94-54-08-90-0B" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 80
+                       { -1056963760, "E8-FE-B3-7C-94-54-08-90-0B-6A" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 88
+                       { -1056963752, "E8-FE-B3-7C-94-54-08-90-0B-6A-20" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 96
+                       { -1056963744, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 104
+                       { -1056963736, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 112
+                       { -1056963728, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 120
+                       { -1056963720, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 128
+                       { -1056963712, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 136
+                       { -1056963704, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 144
+                       { -1056963696, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 152
+                       { -1056963688, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 160
+                       { -1056963680, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 168
+                       { -1056963672, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 176
+                       { -1056963664, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 184
+                       { -1056963656, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8-50" },
+                       // block size: 192, key size: 256, padding: Zeros, feedback: 192
+                       { -1056963648, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8-50-AD" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 8
+                       { -1056963576, "E8-58" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 16
+                       { -1056963568, "E8-FE-C4-31" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 24
+                       { -1056963560, "E8-FE-B3-CF-A5-61" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 32
+                       { -1056963552, "E8-FE-B3-7C-C5-E1-B2-27" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 40
+                       { -1056963544, "E8-FE-B3-7C-94-9C-25-0E-51-6C" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 48
+                       { -1056963536, "E8-FE-B3-7C-94-54-64-31-F5-23-A9-61" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 56
+                       { -1056963528, "E8-FE-B3-7C-94-54-08-B7-B6-33-64-F0-AC-26" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 64
+                       { -1056963520, "E8-FE-B3-7C-94-54-08-90-19-86-84-07-28-AC-6E-39" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 72
+                       { -1056963512, "E8-FE-B3-7C-94-54-08-90-0B-E0-83-42-EF-69-B6-11-1D-79" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 80
+                       { -1056963504, "E8-FE-B3-7C-94-54-08-90-0B-6A-7A-05-8F-2C-02-C4-EB-77-9A-68" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 88
+                       { -1056963496, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-A9-4C-EB-32-91-8C-74-B6-DA-AE-0D" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 96
+                       { -1056963488, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-09-F6-D0-CE-CC-AF-26-D4-16-D9-0E-F4" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 104
+                       { -1056963480, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-98-A1-28-1A-4D-B4-39-E7-CF-83-84-D2-89" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 112
+                       { -1056963472, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-39-64-3A-F1-A7-85-C6-68-CF-F2-27-C0-F4-2D" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 120
+                       { -1056963464, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-56-F0-6C-DC-28-40-83-56-69-06-C0-D7-33-54-21" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 128
+                       { -1056963456, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-8A-C7-F4-80-4D-AF-0A-B9-F8-F1-4E-7C-D0-17-0B-AC" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 136
+                       { -1056963448, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-14-34-7B-16-60-3C-28-A6-C2-D4-B6-42-F9-C0-EE-57-EC" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 144
+                       { -1056963440, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-F2-A4-E2-07-D2-2C-B0-CD-D5-F8-52-B8-1F-C9-A2-1C-52-1C" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 152
+                       { -1056963432, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-79-E7-47-C9-33-14-8A-01-A9-81-09-79-AE-B0-B6-33-97-C4-3E" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 160
+                       { -1056963424, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-4A-15-F3-AC-8F-F8-56-14-8A-29-02-06-5A-BD-6A-1B-4F-14-65-DF" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 168
+                       { -1056963416, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-47-CE-BC-34-82-67-CB-82-03-48-98-60-BF-77-5B-36-A8-A3-C0-47-AE" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 176
+                       { -1056963408, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8-DC-D4-C8-9B-70-BB-AE-87-EC-43-6B-A9-33-D9-A8-84-BE-DB-44-2B-85-7F" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 184
+                       { -1056963400, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8-50-E4-C0-54-61-1E-44-79-D8-B5-A1-24-B6-0D-7C-5D-E0-D6-01-C8-BE-04-80-DC" },
+                       // block size: 192, key size: 256, padding: ANSIX923, feedback: 192
+                       { -1056963392, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8-50-AD-D0-6A-46-CE-6E-25-85-48-90-BB-42-94-16-E5-29-4E-94-09-A5-88-0C-1F-40-40" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 8
+                       { -1056963320, "E8-58" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 16
+                       { -1056963312, "E8-FE-D9-31" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 24
+                       { -1056963304, "E8-FE-B3-E7-C4-61" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 32
+                       { -1056963296, "E8-FE-B3-7C-C4-F3-EA-27" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 40
+                       { -1056963288, "E8-FE-B3-7C-94-3E-48-75-D0-6C" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 48
+                       { -1056963280, "E8-FE-B3-7C-94-54-95-31-ED-CF-DD-61" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 56
+                       { -1056963272, "E8-FE-B3-7C-94-54-08-E8-B7-FD-B9-9C-8C-26" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 64
+                       { -1056963264, "E8-FE-B3-7C-94-54-08-90-2A-3D-AF-9D-AF-BB-AD-39" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 72
+                       { -1056963256, "E8-FE-B3-7C-94-54-08-90-0B-7F-70-2C-39-2F-B5-0D-58-79" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 80
+                       { -1056963248, "E8-FE-B3-7C-94-54-08-90-0B-6A-E1-01-99-B2-14-52-3E-B1-0B-68" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 88
+                       { -1056963240, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-73-B3-7C-77-A8-95-75-6F-61-E0-0D" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 96
+                       { -1056963232, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-F2-D6-E8-F6-F1-3B-54-8A-C0-E0-33-F4" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 104
+                       { -1056963224, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-36-D0-70-66-EB-94-9D-A4-92-DA-62-98-89" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 112
+                       { -1056963216, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-CD-15-1B-F2-32-6E-4C-58-73-CF-6F-60-9E-2D" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 120
+                       { -1056963208, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-4B-A0-63-4E-13-B7-4B-0E-3B-69-8D-97-F7-55-21" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 128
+                       { -1056963200, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-6A-49-71-50-C1-B4-57-D9-17-62-95-12-B9-0F-E4-AC" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 136
+                       { -1056963192, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-F2-7A-FE-BC-C2-DF-48-3B-E8-0D-F7-E7-C4-3C-A7-6A-EC" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 144
+                       { -1056963184, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-C5-CA-6E-BE-28-BF-B3-E9-8A-88-2B-24-B5-34-13-33-0E-1C" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 152
+                       { -1056963176, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-64-87-33-05-C1-67-D7-1E-BF-B8-CF-8B-C0-1C-67-25-A9-43-3E" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 160
+                       { -1056963168, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-7C-43-EB-60-33-8C-47-C6-45-3C-A1-22-16-C1-DA-9F-F0-54-07-DF" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 168
+                       { -1056963160, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-F7-23-E8-3F-1C-73-9E-DC-91-A7-34-EB-59-AA-80-EC-66-09-04-55-AE" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 176
+                       { -1056963152, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8-B9-18-5E-5D-7E-95-06-EB-B7-3C-27-E7-92-5A-A1-93-CF-24-03-08-B1-7F" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 184
+                       { -1056963144, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8-50-98-2E-B2-75-CD-2C-15-E2-D5-25-70-C3-F6-A9-26-ED-60-18-6B-86-D8-28-DC" },
+                       // block size: 192, key size: 256, padding: ISO10126, feedback: 192
+                       { -1056963136, "E8-FE-B3-7C-94-54-08-90-0B-6A-20-9B-6B-02-81-68-CF-9B-2A-E0-6A-D8-50-AD-E0-ED-C8-EA-F9-08-C1-14-6F-C6-2B-34-7C-26-FF-56-DB-11-1E-57-0B-63-33-40" },
+                       // block size: 256, key size: 128, padding: None, feedback: 8
+                       { 8388872, "59" },
+                       // block size: 256, key size: 128, padding: None, feedback: 16
+                       { 8388880, "59-6D" },
+                       // block size: 256, key size: 128, padding: None, feedback: 24
+                       { 8388888, "59-6D-4F" },
+                       // block size: 256, key size: 128, padding: None, feedback: 32
+                       { 8388896, "59-6D-4F-74" },
+                       // block size: 256, key size: 128, padding: None, feedback: 40
+                       { 8388904, "59-6D-4F-74-24" },
+                       // block size: 256, key size: 128, padding: None, feedback: 48
+                       { 8388912, "59-6D-4F-74-24-87" },
+                       // block size: 256, key size: 128, padding: None, feedback: 56
+                       { 8388920, "59-6D-4F-74-24-87-57" },
+                       // block size: 256, key size: 128, padding: None, feedback: 64
+                       { 8388928, "59-6D-4F-74-24-87-57-A3" },
+                       // block size: 256, key size: 128, padding: None, feedback: 72
+                       { 8388936, "59-6D-4F-74-24-87-57-A3-E0" },
+                       // block size: 256, key size: 128, padding: None, feedback: 80
+                       { 8388944, "59-6D-4F-74-24-87-57-A3-E0-A1" },
+                       // block size: 256, key size: 128, padding: None, feedback: 88
+                       { 8388952, "59-6D-4F-74-24-87-57-A3-E0-A1-91" },
+                       // block size: 256, key size: 128, padding: None, feedback: 96
+                       { 8388960, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6" },
+                       // block size: 256, key size: 128, padding: None, feedback: 104
+                       { 8388968, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85" },
+                       // block size: 256, key size: 128, padding: None, feedback: 112
+                       { 8388976, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1" },
+                       // block size: 256, key size: 128, padding: None, feedback: 120
+                       { 8388984, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63" },
+                       // block size: 256, key size: 128, padding: None, feedback: 128
+                       { 8388992, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0" },
+                       // block size: 256, key size: 128, padding: None, feedback: 136
+                       { 8389000, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34" },
+                       // block size: 256, key size: 128, padding: None, feedback: 144
+                       { 8389008, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99" },
+                       // block size: 256, key size: 128, padding: None, feedback: 152
+                       { 8389016, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29" },
+                       // block size: 256, key size: 128, padding: None, feedback: 160
+                       { 8389024, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21" },
+                       // block size: 256, key size: 128, padding: None, feedback: 168
+                       { 8389032, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91" },
+                       // block size: 256, key size: 128, padding: None, feedback: 176
+                       { 8389040, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D" },
+                       // block size: 256, key size: 128, padding: None, feedback: 184
+                       { 8389048, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7" },
+                       // block size: 256, key size: 128, padding: None, feedback: 192
+                       { 8389056, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC" },
+                       // block size: 256, key size: 128, padding: None, feedback: 200
+                       { 8389064, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31" },
+                       // block size: 256, key size: 128, padding: None, feedback: 208
+                       { 8389072, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0" },
+                       // block size: 256, key size: 128, padding: None, feedback: 216
+                       { 8389080, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB" },
+                       // block size: 256, key size: 128, padding: None, feedback: 224
+                       { 8389088, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0" },
+                       // block size: 256, key size: 128, padding: None, feedback: 232
+                       { 8389096, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C" },
+                       // block size: 256, key size: 128, padding: None, feedback: 240
+                       { 8389104, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1" },
+                       // block size: 256, key size: 128, padding: None, feedback: 248
+                       { 8389112, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1-A9" },
+                       // block size: 256, key size: 128, padding: None, feedback: 256
+                       { 8389120, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1-A9-71" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 8
+                       { 8389128, "59-57" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 16
+                       { 8389136, "59-6D-C9-62" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 24
+                       { 8389144, "59-6D-4F-26-3A-63" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 32
+                       { 8389152, "59-6D-4F-74-86-95-BA-BB" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 40
+                       { 8389160, "59-6D-4F-74-24-D0-8B-E7-31-ED" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 48
+                       { 8389168, "59-6D-4F-74-24-87-69-D1-5A-3D-2C-98" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 56
+                       { 8389176, "59-6D-4F-74-24-87-57-F1-13-9B-F2-93-C8-25" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 64
+                       { 8389184, "59-6D-4F-74-24-87-57-A3-A4-AF-13-9A-1E-A1-49-B5" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 72
+                       { 8389192, "59-6D-4F-74-24-87-57-A3-E0-53-20-D6-1B-D2-B0-B6-47-32" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 80
+                       { 8389200, "59-6D-4F-74-24-87-57-A3-E0-A1-95-0A-4E-84-2E-F1-2C-4B-C7-50" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 88
+                       { 8389208, "59-6D-4F-74-24-87-57-A3-E0-A1-91-EC-86-5C-58-1E-F6-FF-3C-EE-A4-D1" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 96
+                       { 8389216, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-97-E1-8C-22-7D-D4-F6-31-2D-C2-1C-A3" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 104
+                       { 8389224, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-45-AC-4A-49-B7-DB-74-CF-97-CE-AE-E6-84" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 112
+                       { 8389232, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-02-94-D2-E3-69-71-F5-07-64-CE-38-B1-84-54" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 120
+                       { 8389240, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C7-11-3D-36-4D-8C-79-C1-44-34-AA-0D-E2-AB-2F" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 128
+                       { 8389248, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-96-7B-ED-35-C5-8B-0A-76-F7-4A-28-BF-B9-FE-35-81" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 136
+                       { 8389256, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-9E-40-AA-B6-D2-D5-32-F5-40-EE-81-05-B1-24-BC-A1-A9" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 144
+                       { 8389264, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-A6-E7-29-7F-BB-D9-8D-E1-DB-4F-3F-E2-98-16-61-FE-3A-3E" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 152
+                       { 8389272, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-F3-39-7E-1A-6E-4B-02-6A-89-1E-14-53-F9-C5-59-8A-81-AE-29" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 160
+                       { 8389280, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-0A-92-AA-7E-A5-8D-A9-89-A0-1E-A0-D0-0B-F2-D8-C9-02-DF-E5-FE" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 168
+                       { 8389288, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-DE-42-EF-32-0F-3E-9C-1C-A3-70-23-58-8C-90-56-42-47-F7-B5-0F-C1" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 176
+                       { 8389296, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-76-C6-F0-FF-4D-06-8B-8A-64-16-84-DA-2C-9E-2D-F0-AD-E9-83-CE-71-76" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 184
+                       { 8389304, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-EA-48-4B-62-60-47-81-3F-6D-43-85-DC-B9-E5-FE-70-0F-0A-AD-84-05-B0-05" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 192
+                       { 8389312, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-5B-B4-08-45-DB-C3-3C-5E-9F-58-70-51-75-E5-3C-95-E1-49-7F-5E-01-3F-95-58" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 200
+                       { 8389320, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-0D-DD-AA-5D-51-9E-3C-FA-14-F2-36-E2-FC-F6-8E-1A-91-CD-32-BF-33-4E-25-6A-C5" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 208
+                       { 8389328, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-BE-4D-C5-57-22-B3-FC-F5-94-42-C7-C8-0B-9B-38-19-20-96-A9-2F-83-7D-9C-86-6F-23" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 216
+                       { 8389336, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-61-69-56-8E-2A-02-8A-13-F5-2E-22-76-B4-EC-CF-04-28-F9-D5-7F-DF-01-93-C8-F5-87-27" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 224
+                       { 8389344, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-6B-A2-24-3F-4D-69-DA-42-08-52-3C-4A-F0-E4-0E-92-6F-62-36-A6-80-67-DC-8E-47-94-B1-70" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 232
+                       { 8389352, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-B6-4F-7C-C4-A6-A0-6A-1F-5B-95-5A-75-03-AC-9D-07-33-6B-35-E8-81-51-AC-82-D0-DB-27-1D-25" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 240
+                       { 8389360, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1-1B-D8-DE-50-0D-D2-4B-C9-97-7A-BC-E8-0F-EB-3C-39-96-D6-EF-21-B3-89-74-3B-10-84-25-40-28-BD" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 248
+                       { 8389368, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1-A9-11-62-58-0C-FE-AF-52-F4-97-61-4E-28-02-FF-F1-D3-6A-01-0B-E3-64-67-0C-88-01-92-32-E5-66-44-FE" },
+                       // block size: 256, key size: 128, padding: PKCS7, feedback: 256
+                       { 8389376, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1-A9-71-70-40-F2-31-76-EB-F4-70-37-F4-9C-9E-C9-4B-B7-FA-F2-F9-FF-ED-2D-0E-68-C1-4B-34-0E-B1-80-69-4F-CE" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 8
+                       { 8389384, "59" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 16
+                       { 8389392, "59-6D" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 24
+                       { 8389400, "59-6D-4F" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 32
+                       { 8389408, "59-6D-4F-74" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 40
+                       { 8389416, "59-6D-4F-74-24" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 48
+                       { 8389424, "59-6D-4F-74-24-87" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 56
+                       { 8389432, "59-6D-4F-74-24-87-57" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 64
+                       { 8389440, "59-6D-4F-74-24-87-57-A3" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 72
+                       { 8389448, "59-6D-4F-74-24-87-57-A3-E0" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 80
+                       { 8389456, "59-6D-4F-74-24-87-57-A3-E0-A1" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 88
+                       { 8389464, "59-6D-4F-74-24-87-57-A3-E0-A1-91" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 96
+                       { 8389472, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 104
+                       { 8389480, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 112
+                       { 8389488, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 120
+                       { 8389496, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 128
+                       { 8389504, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 136
+                       { 8389512, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 144
+                       { 8389520, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 152
+                       { 8389528, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 160
+                       { 8389536, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 168
+                       { 8389544, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 176
+                       { 8389552, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 184
+                       { 8389560, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 192
+                       { 8389568, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 200
+                       { 8389576, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 208
+                       { 8389584, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 216
+                       { 8389592, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 224
+                       { 8389600, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 232
+                       { 8389608, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 240
+                       { 8389616, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 248
+                       { 8389624, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1-A9" },
+                       // block size: 256, key size: 128, padding: Zeros, feedback: 256
+                       { 8389632, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1-A9-71" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 8
+                       { 8389640, "59-57" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 16
+                       { 8389648, "59-6D-CB-62" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 24
+                       { 8389656, "59-6D-4F-25-39-63" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 32
+                       { 8389664, "59-6D-4F-74-82-91-BE-BB" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 40
+                       { 8389672, "59-6D-4F-74-24-D5-8E-E2-34-ED" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 48
+                       { 8389680, "59-6D-4F-74-24-87-6F-D7-5C-3B-2A-98" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 56
+                       { 8389688, "59-6D-4F-74-24-87-57-F6-14-9C-F5-94-CF-25" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 64
+                       { 8389696, "59-6D-4F-74-24-87-57-A3-AC-A7-1B-92-16-A9-41-B5" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 72
+                       { 8389704, "59-6D-4F-74-24-87-57-A3-E0-5A-29-DF-12-DB-B9-BF-4E-32" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 80
+                       { 8389712, "59-6D-4F-74-24-87-57-A3-E0-A1-9F-00-44-8E-24-FB-26-41-CD-50" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 88
+                       { 8389720, "59-6D-4F-74-24-87-57-A3-E0-A1-91-E7-8D-57-53-15-FD-F4-37-E5-AF-D1" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 96
+                       { 8389728, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-9B-ED-80-2E-71-D8-FA-3D-21-CE-10-A3" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 104
+                       { 8389736, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-48-A1-47-44-BA-D6-79-C2-9A-C3-A3-EB-84" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 112
+                       { 8389744, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-0C-9A-DC-ED-67-7F-FB-09-6A-C0-36-BF-8A-54" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 120
+                       { 8389752, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C8-1E-32-39-42-83-76-CE-4B-3B-A5-02-ED-A4-2F" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 128
+                       { 8389760, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-86-6B-FD-25-D5-9B-1A-66-E7-5A-38-AF-A9-EE-25-81" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 136
+                       { 8389768, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-8F-51-BB-A7-C3-C4-23-E4-51-FF-90-14-A0-35-AD-B0-A9" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 144
+                       { 8389776, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-B4-F5-3B-6D-A9-CB-9F-F3-C9-5D-2D-F0-8A-04-73-EC-28-3E" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 152
+                       { 8389784, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-E0-2A-6D-09-7D-58-11-79-9A-0D-07-40-EA-D6-4A-99-92-BD-29" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 160
+                       { 8389792, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-1E-86-BE-6A-B1-99-BD-9D-B4-0A-B4-C4-1F-E6-CC-DD-16-CB-F1-FE" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 168
+                       { 8389800, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-CB-57-FA-27-1A-2B-89-09-B6-65-36-4D-99-85-43-57-52-E2-A0-1A-C1" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 176
+                       { 8389808, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-60-D0-E6-E9-5B-10-9D-9C-72-00-92-CC-3A-88-3B-E6-BB-FF-95-D8-67-76" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 184
+                       { 8389816, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-FD-5F-5C-75-77-50-96-28-7A-54-92-CB-AE-F2-E9-67-18-1D-BA-93-12-A7-05" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 192
+                       { 8389824, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-43-AC-10-5D-C3-DB-24-46-87-40-68-49-6D-FD-24-8D-F9-51-67-46-19-27-8D-58" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 200
+                       { 8389832, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-14-C4-B3-44-48-87-25-E3-0D-EB-2F-FB-E5-EF-97-03-88-D4-2B-A6-2A-57-3C-73-C5" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 208
+                       { 8389840, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-A4-57-DF-4D-38-A9-E6-EF-8E-58-DD-D2-11-81-22-03-3A-8C-B3-35-99-67-86-9C-75-23" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 216
+                       { 8389848, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-7A-72-4D-95-31-19-91-08-EE-35-39-6D-AF-F7-D4-1F-33-E2-CE-64-C4-1A-88-D3-EE-9C-27" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 224
+                       { 8389856, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-77-BE-38-23-51-75-C6-5E-14-4E-20-56-EC-F8-12-8E-73-7E-2A-BA-9C-7B-C0-92-5B-88-AD-70" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 232
+                       { 8389864, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-AB-52-61-D9-BB-BD-77-02-46-88-47-68-1E-B1-80-1A-2E-76-28-F5-9C-4C-B1-9F-CD-C6-3A-00-25" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 240
+                       { 8389872, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1-05-C6-C0-4E-13-CC-55-D7-89-64-A2-F6-11-F5-22-27-88-C8-F1-3F-AD-97-6A-25-0E-9A-3B-5E-36-BD" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 248
+                       { 8389880, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1-A9-0E-7D-47-13-E1-B0-4D-EB-88-7E-51-37-1D-E0-EE-CC-75-1E-14-FC-7B-78-13-97-1E-8D-2D-FA-79-5B-FE" },
+                       // block size: 256, key size: 128, padding: ANSIX923, feedback: 256
+                       { 8389888, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1-A9-71-50-60-D2-11-56-CB-D4-50-17-D4-BC-BE-E9-6B-97-DA-D2-D9-DF-CD-0D-2E-48-E1-6B-14-2E-91-A0-49-6F-CE" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 8
+                       { 8389896, "59-57" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 16
+                       { 8389904, "59-6D-FC-62" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 24
+                       { 8389912, "59-6D-4F-1B-26-63" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 32
+                       { 8389920, "59-6D-4F-74-CF-D9-49-BB" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 40
+                       { 8389928, "59-6D-4F-74-24-1A-98-33-59-ED" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 48
+                       { 8389936, "59-6D-4F-74-24-87-23-42-3C-72-A9-98" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 56
+                       { 8389944, "59-6D-4F-74-24-87-57-C8-65-D1-ED-79-C0-25" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 64
+                       { 8389952, "59-6D-4F-74-24-87-57-A3-FD-1E-6B-D0-BE-9D-C6-B5" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 72
+                       { 8389960, "59-6D-4F-74-24-87-57-A3-E0-48-C7-A7-04-B0-E8-6B-66-32" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 80
+                       { 8389968, "59-6D-4F-74-24-87-57-A3-E0-A1-BB-86-E3-B6-B9-57-EF-75-A1-50" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 88
+                       { 8389976, "59-6D-4F-74-24-87-57-A3-E0-A1-91-9F-E0-C0-2B-7C-51-A8-D5-F5-4B-D1" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 96
+                       { 8389984, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-A5-7C-65-6D-81-CF-1D-0C-DA-F4-16-A3" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 104
+                       { 8389992, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-75-42-40-A5-8A-37-4C-16-43-74-3F-C1-84" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 112
+                       { 8390000, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-16-DB-C8-A9-46-6F-CC-9B-05-57-C6-86-37-54" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 120
+                       { 8390008, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-EB-76-2E-69-4C-FC-1E-55-18-53-36-DD-97-FE-2F" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 128
+                       { 8390016, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-1A-80-F8-C1-FE-F0-3C-4C-CA-BE-1D-94-21-FC-45-81" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 136
+                       { 8390024, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-43-74-ED-DC-12-27-D8-D1-3D-AF-9B-20-CC-46-D6-62-A9" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 144
+                       { 8390032, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-32-2A-D9-17-EE-1C-B5-47-A6-90-9B-34-DE-F2-7C-A3-01-3E" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 152
+                       { 8390040, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-EB-4B-EE-E6-31-E4-A5-B8-71-79-42-AA-51-23-07-05-2A-B2-29" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 160
+                       { 8390048, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-EA-3F-51-82-01-52-77-4E-42-92-6A-E0-94-22-6C-F0-0E-6C-72-FE" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 168
+                       { 8390056, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-D0-1F-0D-D9-07-6C-D0-B3-39-3B-C5-BA-AC-A3-A3-CA-C3-91-81-73-C1" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 176
+                       { 8390064, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-87-04-50-0B-59-55-47-FD-FA-02-3B-A9-DE-24-AF-50-26-C8-A9-53-43-76" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 184
+                       { 8390072, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-C2-DF-19-13-27-89-E6-8E-68-CF-F8-79-1B-81-36-46-EE-58-A0-95-C5-BF-05" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 192
+                       { 8390080, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-DA-51-9C-62-9B-54-03-B1-86-BD-10-02-8A-31-3F-B1-54-EC-CC-7D-23-9E-E5-58" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 200
+                       { 8390088, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-61-13-C7-DB-6E-3A-DC-C4-FB-8B-12-FA-9B-69-C7-89-99-56-96-77-44-85-1C-AD-C5" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 208
+                       { 8390096, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-9A-D3-50-01-46-E6-CB-9F-D5-90-F3-62-1E-30-76-AA-CB-D2-49-8F-22-9F-FD-84-99-23" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 216
+                       { 8390104, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-62-C2-C4-A2-A3-1B-6D-19-DF-66-F8-1A-E8-90-49-4B-B9-D0-1A-09-CF-30-01-B0-1B-A6-27" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 224
+                       { 8390112, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-72-C2-56-BC-B5-98-82-7D-23-D9-98-DF-17-01-24-74-36-BA-35-BF-2F-38-E3-0B-97-4A-38-70" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 232
+                       { 8390120, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-46-5C-E7-43-CD-08-C0-94-7E-91-81-70-9E-C8-92-46-C5-3D-75-0B-29-3F-A9-A7-CE-13-E1-0E-25" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 240
+                       { 8390128, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1-B1-32-4E-7D-D3-C2-D4-A4-52-EA-D4-F4-E6-5F-F6-2B-37-DF-89-B5-17-D6-87-83-6D-9E-1F-C5-62-BD" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 248
+                       { 8390136, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1-A9-E1-0B-E6-65-8C-FE-55-FD-F4-BD-AC-8B-E1-49-FA-D6-9E-3D-EF-B2-F1-DA-2E-15-AD-44-0C-2A-81-8E-FE" },
+                       // block size: 256, key size: 128, padding: ISO10126, feedback: 256
+                       { 8390144, "59-6D-4F-74-24-87-57-A3-E0-A1-91-F6-85-B1-63-C0-34-99-29-21-91-6D-F7-CC-31-F0-CB-B0-4C-A1-A9-71-E8-D0-1E-83-3D-6F-06-1A-33-3E-D0-58-44-49-9B-CE-78-6B-8E-DD-52-A6-39-97-0D-03-DE-07-F2-38-A5-CE" },
+                       // block size: 256, key size: 192, padding: None, feedback: 8
+                       { 12583176, "06" },
+                       // block size: 256, key size: 192, padding: None, feedback: 16
+                       { 12583184, "06-D9" },
+                       // block size: 256, key size: 192, padding: None, feedback: 24
+                       { 12583192, "06-D9-CB" },
+                       // block size: 256, key size: 192, padding: None, feedback: 32
+                       { 12583200, "06-D9-CB-C2" },
+                       // block size: 256, key size: 192, padding: None, feedback: 40
+                       { 12583208, "06-D9-CB-C2-0E" },
+                       // block size: 256, key size: 192, padding: None, feedback: 48
+                       { 12583216, "06-D9-CB-C2-0E-49" },
+                       // block size: 256, key size: 192, padding: None, feedback: 56
+                       { 12583224, "06-D9-CB-C2-0E-49-4D" },
+                       // block size: 256, key size: 192, padding: None, feedback: 64
+                       { 12583232, "06-D9-CB-C2-0E-49-4D-60" },
+                       // block size: 256, key size: 192, padding: None, feedback: 72
+                       { 12583240, "06-D9-CB-C2-0E-49-4D-60-BD" },
+                       // block size: 256, key size: 192, padding: None, feedback: 80
+                       { 12583248, "06-D9-CB-C2-0E-49-4D-60-BD-68" },
+                       // block size: 256, key size: 192, padding: None, feedback: 88
+                       { 12583256, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C" },
+                       // block size: 256, key size: 192, padding: None, feedback: 96
+                       { 12583264, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4" },
+                       // block size: 256, key size: 192, padding: None, feedback: 104
+                       { 12583272, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B" },
+                       // block size: 256, key size: 192, padding: None, feedback: 112
+                       { 12583280, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6" },
+                       // block size: 256, key size: 192, padding: None, feedback: 120
+                       { 12583288, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4" },
+                       // block size: 256, key size: 192, padding: None, feedback: 128
+                       { 12583296, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE" },
+                       // block size: 256, key size: 192, padding: None, feedback: 136
+                       { 12583304, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E" },
+                       // block size: 256, key size: 192, padding: None, feedback: 144
+                       { 12583312, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89" },
+                       // block size: 256, key size: 192, padding: None, feedback: 152
+                       { 12583320, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D" },
+                       // block size: 256, key size: 192, padding: None, feedback: 160
+                       { 12583328, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D" },
+                       // block size: 256, key size: 192, padding: None, feedback: 168
+                       { 12583336, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9" },
+                       // block size: 256, key size: 192, padding: None, feedback: 176
+                       { 12583344, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E" },
+                       // block size: 256, key size: 192, padding: None, feedback: 184
+                       { 12583352, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7" },
+                       // block size: 256, key size: 192, padding: None, feedback: 192
+                       { 12583360, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7" },
+                       // block size: 256, key size: 192, padding: None, feedback: 200
+                       { 12583368, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77" },
+                       // block size: 256, key size: 192, padding: None, feedback: 208
+                       { 12583376, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE" },
+                       // block size: 256, key size: 192, padding: None, feedback: 216
+                       { 12583384, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2" },
+                       // block size: 256, key size: 192, padding: None, feedback: 224
+                       { 12583392, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0" },
+                       // block size: 256, key size: 192, padding: None, feedback: 232
+                       { 12583400, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0" },
+                       // block size: 256, key size: 192, padding: None, feedback: 240
+                       { 12583408, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D" },
+                       // block size: 256, key size: 192, padding: None, feedback: 248
+                       { 12583416, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D-7E" },
+                       // block size: 256, key size: 192, padding: None, feedback: 256
+                       { 12583424, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D-7E-CA" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 8
+                       { 12583432, "06-67" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 16
+                       { 12583440, "06-D9-AD-1C" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 24
+                       { 12583448, "06-D9-CB-DD-A0-89" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 32
+                       { 12583456, "06-D9-CB-C2-86-BD-51-2C" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 40
+                       { 12583464, "06-D9-CB-C2-0E-D5-C9-22-4D-18" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 48
+                       { 12583472, "06-D9-CB-C2-0E-49-20-A9-D4-75-78-E7" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 56
+                       { 12583480, "06-D9-CB-C2-0E-49-4D-89-7D-D5-07-17-E0-3F" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 64
+                       { 12583488, "06-D9-CB-C2-0E-49-4D-60-50-41-E0-EA-89-77-36-53" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 72
+                       { 12583496, "06-D9-CB-C2-0E-49-4D-60-BD-31-24-D6-E4-1B-0E-F4-3E-94" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 80
+                       { 12583504, "06-D9-CB-C2-0E-49-4D-60-BD-68-1F-21-40-A6-83-79-35-18-D9-36" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 88
+                       { 12583512, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-4F-E5-57-B2-05-AC-AE-51-D8-74-CD" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 96
+                       { 12583520, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-0E-5F-CC-47-42-52-BF-7D-C7-28-9F-0C" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 104
+                       { 12583528, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-70-0E-F5-63-E0-A3-0C-16-64-86-87-B4-C4" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 112
+                       { 12583536, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-6B-EB-08-BE-79-4B-14-92-55-75-B8-8A-B2-73" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 120
+                       { 12583544, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-EE-5F-63-84-EE-C3-9F-AE-DD-27-46-86-E0-95-F3" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 128
+                       { 12583552, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-AB-7D-81-62-8B-2D-37-9A-51-DD-AA-28-BE-3D-48-01" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 136
+                       { 12583560, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-3C-C4-5F-C4-07-95-39-DE-60-04-4D-90-E1-D6-55-17-91" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 144
+                       { 12583568, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-27-B3-9B-E4-B2-1D-25-BD-C6-F6-7E-97-D9-A6-40-A3-2E-98" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 152
+                       { 12583576, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-51-84-71-17-D5-5C-11-E2-C6-A9-54-A4-EB-F0-B3-92-84-FD-A2" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 160
+                       { 12583584, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-23-17-C8-C3-33-77-E5-0E-AB-66-DD-B2-17-EC-D3-D2-99-61-E6-48" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 168
+                       { 12583592, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-9B-99-5A-B1-F2-50-95-C4-3E-44-84-F4-2C-04-85-C6-27-2D-27-D0-6D" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 176
+                       { 12583600, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-88-1F-B7-2A-CD-62-16-65-4C-8D-DC-61-8E-BB-69-CC-C4-C7-E9-0E-74-C6" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 184
+                       { 12583608, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-7B-FB-E5-C6-A8-AF-93-42-9A-A4-71-9B-94-44-D4-93-54-CE-C1-11-45-6B-E1" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 192
+                       { 12583616, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-9D-D1-45-9A-18-FD-9F-AC-1F-94-D4-0C-FC-65-BD-94-BC-59-FF-72-96-72-DC-0B" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 200
+                       { 12583624, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-F9-39-E2-EB-A1-24-9D-0A-5A-A9-12-07-9C-15-FE-E5-2F-ED-B5-F0-4D-99-CE-A2-40" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 208
+                       { 12583632, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-DF-A0-AE-62-9B-2A-24-9D-FC-B8-17-32-D8-B3-7A-B0-A7-2C-CB-3A-BC-30-DA-BE-42-F3" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 216
+                       { 12583640, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-B6-1B-FB-84-5F-82-97-F3-92-B6-FE-05-61-F5-30-2F-F0-21-F7-50-23-C1-87-B1-29-66-BF" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 224
+                       { 12583648, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-66-B8-C0-5E-C2-1C-3E-25-D7-7A-BC-B3-82-97-06-61-62-77-B7-BE-5F-3B-6D-F6-2F-17-F2-C8" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 232
+                       { 12583656, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-40-47-C8-2C-69-EF-4E-B9-AF-27-B7-9E-ED-87-CE-DD-4B-AF-A9-C4-C2-2A-54-2E-E5-1B-FB-65-55" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 240
+                       { 12583664, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D-83-FD-DB-91-F4-34-DF-5A-9E-67-C3-00-D8-A6-92-4D-BF-32-CD-28-58-A5-8F-1C-C6-01-2E-9C-0D-5A" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 248
+                       { 12583672, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D-7E-B2-02-B8-B2-BC-48-A1-EF-57-EF-E4-D8-BA-CA-24-B6-03-ED-8F-36-49-04-C2-45-69-94-1C-16-7B-F5-E4" },
+                       // block size: 256, key size: 192, padding: PKCS7, feedback: 256
+                       { 12583680, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D-7E-CA-43-23-C4-F1-75-9B-7A-AC-35-C5-68-C3-95-55-3E-DC-2E-A8-18-40-5E-69-12-A7-2D-05-81-28-21-41-99-E3" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 8
+                       { 12583688, "06" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 16
+                       { 12583696, "06-D9" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 24
+                       { 12583704, "06-D9-CB" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 32
+                       { 12583712, "06-D9-CB-C2" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 40
+                       { 12583720, "06-D9-CB-C2-0E" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 48
+                       { 12583728, "06-D9-CB-C2-0E-49" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 56
+                       { 12583736, "06-D9-CB-C2-0E-49-4D" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 64
+                       { 12583744, "06-D9-CB-C2-0E-49-4D-60" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 72
+                       { 12583752, "06-D9-CB-C2-0E-49-4D-60-BD" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 80
+                       { 12583760, "06-D9-CB-C2-0E-49-4D-60-BD-68" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 88
+                       { 12583768, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 96
+                       { 12583776, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 104
+                       { 12583784, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 112
+                       { 12583792, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 120
+                       { 12583800, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 128
+                       { 12583808, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 136
+                       { 12583816, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 144
+                       { 12583824, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 152
+                       { 12583832, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 160
+                       { 12583840, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 168
+                       { 12583848, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 176
+                       { 12583856, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 184
+                       { 12583864, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 192
+                       { 12583872, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 200
+                       { 12583880, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 208
+                       { 12583888, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 216
+                       { 12583896, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 224
+                       { 12583904, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 232
+                       { 12583912, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 240
+                       { 12583920, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 248
+                       { 12583928, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D-7E" },
+                       // block size: 256, key size: 192, padding: Zeros, feedback: 256
+                       { 12583936, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D-7E-CA" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 8
+                       { 12583944, "06-67" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 16
+                       { 12583952, "06-D9-AF-1C" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 24
+                       { 12583960, "06-D9-CB-DE-A3-89" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 32
+                       { 12583968, "06-D9-CB-C2-82-B9-55-2C" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 40
+                       { 12583976, "06-D9-CB-C2-0E-D0-CC-27-48-18" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 48
+                       { 12583984, "06-D9-CB-C2-0E-49-26-AF-D2-73-7E-E7" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 56
+                       { 12583992, "06-D9-CB-C2-0E-49-4D-8E-7A-D2-00-10-E7-3F" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 64
+                       { 12584000, "06-D9-CB-C2-0E-49-4D-60-58-49-E8-E2-81-7F-3E-53" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 72
+                       { 12584008, "06-D9-CB-C2-0E-49-4D-60-BD-38-2D-DF-ED-12-07-FD-37-94" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 80
+                       { 12584016, "06-D9-CB-C2-0E-49-4D-60-BD-68-15-2B-4A-AC-89-73-3F-12-D3-36" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 88
+                       { 12584024, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-44-EE-5C-B9-0E-A7-A5-5A-D3-7F-CD" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 96
+                       { 12584032, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-02-53-C0-4B-4E-5E-B3-71-CB-24-93-0C" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 104
+                       { 12584040, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-7D-03-F8-6E-ED-AE-01-1B-69-8B-8A-B9-C4" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 112
+                       { 12584048, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-65-E5-06-B0-77-45-1A-9C-5B-7B-B6-84-BC-73" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 120
+                       { 12584056, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-E1-50-6C-8B-E1-CC-90-A1-D2-28-49-89-EF-9A-F3" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 128
+                       { 12584064, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-BB-6D-91-72-9B-3D-27-8A-41-CD-BA-38-AE-2D-58-01" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 136
+                       { 12584072, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-2D-D5-4E-D5-16-84-28-CF-71-15-5C-81-F0-C7-44-06-91" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 144
+                       { 12584080, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-35-A1-89-F6-A0-0F-37-AF-D4-E4-6C-85-CB-B4-52-B1-3C-98" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 152
+                       { 12584088, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-42-97-62-04-C6-4F-02-F1-D5-BA-47-B7-F8-E3-A0-81-97-EE-A2" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 160
+                       { 12584096, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-37-03-DC-D7-27-63-F1-1A-BF-72-C9-A6-03-F8-C7-C6-8D-75-F2-48" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 168
+                       { 12584104, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-8C-4F-A4-E7-45-80-D1-2B-51-91-E1-39-11-90-D3-32-38-32-C5-6D" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 176
+                       { 12584112, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-9E-09-A1-3C-DB-74-00-73-5A-9B-CA-77-98-AD-7F-DA-D2-D1-FF-18-62-C6" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 184
+                       { 12584120, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-6C-EC-F2-D1-BF-B8-84-55-8D-B3-66-8C-83-53-C3-84-43-D9-D6-06-52-7C-E1" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 192
+                       { 12584128, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-85-C9-5D-82-00-E5-87-B4-07-8C-CC-14-E4-7D-A5-8C-A4-41-E7-6A-8E-6A-C4-0B" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 200
+                       { 12584136, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-E0-20-FB-F2-B8-3D-84-13-43-B0-0B-1E-85-0C-E7-FC-36-F4-AC-E9-54-80-D7-BB-40" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 208
+                       { 12584144, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-C5-BA-B4-78-81-30-3E-87-E6-A2-0D-28-C2-A9-60-AA-BD-36-D1-20-A6-2A-C0-A4-58-F3" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 216
+                       { 12584152, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-AD-00-E0-9F-44-99-8C-E8-89-AD-E5-1E-7A-EE-2B-34-EB-3A-EC-4B-38-DA-9C-AA-32-7D-BF" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 224
+                       { 12584160, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-7A-A4-DC-42-DE-00-22-39-CB-66-A0-AF-9E-8B-1A-7D-7E-6B-AB-A2-43-27-71-EA-33-0B-EE-C8" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 232
+                       { 12584168, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-5D-5A-D5-31-74-F2-53-A4-B2-3A-AA-83-F0-9A-D3-C0-56-B2-B4-D9-DF-37-49-33-F8-06-E6-78-55" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 240
+                       { 12584176, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D-9D-E3-C5-8F-EA-2A-C1-44-80-79-DD-1E-C6-B8-8C-53-A1-2C-D3-36-46-BB-91-02-D8-1F-30-82-13-5A" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 248
+                       { 12584184, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D-7E-AD-1D-A7-AD-A3-57-BE-F0-48-F0-FB-C7-A5-D5-3B-A9-1C-F2-90-29-56-1B-DD-5A-76-8B-03-09-64-EA-E4" },
+                       // block size: 256, key size: 192, padding: ANSIX923, feedback: 256
+                       { 12584192, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D-7E-CA-63-03-E4-D1-55-BB-5A-8C-15-E5-48-E3-B5-75-1E-FC-0E-88-38-60-7E-49-32-87-0D-25-A1-08-01-61-B9-E3" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 8
+                       { 12584200, "06-67" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 16
+                       { 12584208, "06-D9-86-1C" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 24
+                       { 12584216, "06-D9-CB-B7-3A-89" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 32
+                       { 12584224, "06-D9-CB-C2-6F-09-89-2C" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 40
+                       { 12584232, "06-D9-CB-C2-0E-95-E5-16-DC-18" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 48
+                       { 12584240, "06-D9-CB-C2-0E-49-2F-A7-9B-9B-D1-E7" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 56
+                       { 12584248, "06-D9-CB-C2-0E-49-4D-55-E2-80-0B-94-3B-3F" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 64
+                       { 12584256, "06-D9-CB-C2-0E-49-4D-60-B9-18-B7-7F-25-F8-CF-53" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 72
+                       { 12584264, "06-D9-CB-C2-0E-49-4D-60-BD-E1-3C-55-5B-BB-EC-DA-D6-94" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 80
+                       { 12584272, "06-D9-CB-C2-0E-49-4D-60-BD-68-74-3D-0A-E3-5F-BB-51-50-2B-36" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 88
+                       { 12584280, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-57-A1-DB-2B-7D-01-18-55-AA-CE-CD" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 96
+                       { 12584288, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-D6-29-20-22-50-83-14-AA-53-07-C0-0C" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 104
+                       { 12584296, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-47-A9-1B-06-AD-DB-94-CD-0D-A0-98-F8-C4" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 112
+                       { 12584304, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-06-54-67-3D-72-D5-E1-08-3D-EC-4B-53-A3-73" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 120
+                       { 12584312, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-3A-A2-3E-53-51-34-43-D6-B2-F7-D8-20-EF-B9-F3" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 128
+                       { 12584320, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-DD-70-6E-52-E2-02-52-89-BF-DD-CF-D9-31-BB-24-01" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 136
+                       { 12584328, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-11-8F-1C-34-F3-4B-0F-86-00-C8-72-3D-90-16-D5-ED-91" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 144
+                       { 12584336, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-CA-D0-28-A1-FA-4C-9E-A4-49-67-F6-88-86-AF-16-12-F7-98" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 152
+                       { 12584344, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-A1-81-0A-16-DF-B8-88-86-C6-AB-A6-C7-01-94-72-44-EE-AA-A2" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 160
+                       { 12584352, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-90-A8-1C-B5-BE-11-CC-AB-1A-41-29-89-ED-DD-15-8B-F2-C9-43-48" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 168
+                       { 12584360, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-AA-0F-DC-66-1A-46-D2-D9-4F-91-9D-40-F0-2C-3D-18-DF-AE-6E-CB-6D" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 176
+                       { 12584368, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-AC-86-A6-53-4E-49-FD-EA-76-3C-38-8A-7A-7B-11-0B-5A-9C-76-C0-8E-C6" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 184
+                       { 12584376, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-26-7E-A6-48-DC-81-C3-04-41-D6-1B-7E-7D-11-2E-B1-89-D1-5E-02-AB-E6-E1" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 192
+                       { 12584384, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-D1-47-20-15-9A-B2-47-DE-DF-84-38-80-F8-9F-91-0F-C2-60-87-7D-89-6C-F5-0B" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 200
+                       { 12584392, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-B4-3C-9B-DE-72-46-F9-B9-74-23-62-D4-44-9B-DA-DB-75-D2-F2-9C-4F-3F-E5-40" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 208
+                       { 12584400, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-AF-21-4F-E5-D7-B5-DE-09-53-B7-FF-CD-69-47-6C-D9-73-87-96-6B-D3-66-51-A1-DE-F3" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 216
+                       { 12584408, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-D6-18-D3-94-54-CC-47-96-E8-4A-1E-39-40-64-D3-F2-09-12-26-6A-79-80-D3-E6-2A-35-BF" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 224
+                       { 12584416, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-A5-0D-92-70-23-92-DB-77-AD-91-D9-45-D5-6D-33-2E-8C-16-4B-68-A5-DC-65-02-85-90-F9-C8" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 232
+                       { 12584424, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-A1-A9-32-C7-F1-08-DD-8D-35-BE-62-A2-9B-57-52-E8-96-0D-73-30-B0-A7-CD-5F-66-74-6B-C1-55" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 240
+                       { 12584432, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D-B6-74-21-D9-25-4C-A1-66-1F-24-06-27-BB-EB-AC-4E-E7-60-B3-DB-93-2A-51-5D-82-6B-BA-3F-78-5A" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 248
+                       { 12584440, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D-7E-D4-A9-A3-A1-34-AE-17-1E-A7-52-BB-2C-D7-B8-86-40-E7-18-84-74-8B-38-E9-70-F5-01-A3-23-BF-A6-E4" },
+                       // block size: 256, key size: 192, padding: ISO10126, feedback: 256
+                       { 12584448, "06-D9-CB-C2-0E-49-4D-60-BD-68-4C-E4-6B-B6-E4-DE-2E-89-1D-6D-E9-8E-A7-D7-77-CE-E2-E0-D0-3D-7E-CA-F9-67-06-F3-91-68-9C-6E-77-D7-43-A9-9E-BF-F9-4A-CE-A8-05-91-96-34-10-9E-90-4A-4A-DE-3F-16-95-E3" },
+                       // block size: 256, key size: 256, padding: None, feedback: 8
+                       { 16777480, "39" },
+                       // block size: 256, key size: 256, padding: None, feedback: 16
+                       { 16777488, "39-DC" },
+                       // block size: 256, key size: 256, padding: None, feedback: 24
+                       { 16777496, "39-DC-83" },
+                       // block size: 256, key size: 256, padding: None, feedback: 32
+                       { 16777504, "39-DC-83-8B" },
+                       // block size: 256, key size: 256, padding: None, feedback: 40
+                       { 16777512, "39-DC-83-8B-BB" },
+                       // block size: 256, key size: 256, padding: None, feedback: 48
+                       { 16777520, "39-DC-83-8B-BB-4D" },
+                       // block size: 256, key size: 256, padding: None, feedback: 56
+                       { 16777528, "39-DC-83-8B-BB-4D-1C" },
+                       // block size: 256, key size: 256, padding: None, feedback: 64
+                       { 16777536, "39-DC-83-8B-BB-4D-1C-C3" },
+                       // block size: 256, key size: 256, padding: None, feedback: 72
+                       { 16777544, "39-DC-83-8B-BB-4D-1C-C3-AB" },
+                       // block size: 256, key size: 256, padding: None, feedback: 80
+                       { 16777552, "39-DC-83-8B-BB-4D-1C-C3-AB-41" },
+                       // block size: 256, key size: 256, padding: None, feedback: 88
+                       { 16777560, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D" },
+                       // block size: 256, key size: 256, padding: None, feedback: 96
+                       { 16777568, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91" },
+                       // block size: 256, key size: 256, padding: None, feedback: 104
+                       { 16777576, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4" },
+                       // block size: 256, key size: 256, padding: None, feedback: 112
+                       { 16777584, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C" },
+                       // block size: 256, key size: 256, padding: None, feedback: 120
+                       { 16777592, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A" },
+                       // block size: 256, key size: 256, padding: None, feedback: 128
+                       { 16777600, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7" },
+                       // block size: 256, key size: 256, padding: None, feedback: 136
+                       { 16777608, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9" },
+                       // block size: 256, key size: 256, padding: None, feedback: 144
+                       { 16777616, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18" },
+                       // block size: 256, key size: 256, padding: None, feedback: 152
+                       { 16777624, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE" },
+                       // block size: 256, key size: 256, padding: None, feedback: 160
+                       { 16777632, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A" },
+                       // block size: 256, key size: 256, padding: None, feedback: 168
+                       { 16777640, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32" },
+                       // block size: 256, key size: 256, padding: None, feedback: 176
+                       { 16777648, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40" },
+                       // block size: 256, key size: 256, padding: None, feedback: 184
+                       { 16777656, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53" },
+                       // block size: 256, key size: 256, padding: None, feedback: 192
+                       { 16777664, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31" },
+                       // block size: 256, key size: 256, padding: None, feedback: 200
+                       { 16777672, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF" },
+                       // block size: 256, key size: 256, padding: None, feedback: 208
+                       { 16777680, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75" },
+                       // block size: 256, key size: 256, padding: None, feedback: 216
+                       { 16777688, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84" },
+                       // block size: 256, key size: 256, padding: None, feedback: 224
+                       { 16777696, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7" },
+                       // block size: 256, key size: 256, padding: None, feedback: 232
+                       { 16777704, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42" },
+                       // block size: 256, key size: 256, padding: None, feedback: 240
+                       { 16777712, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E" },
+                       // block size: 256, key size: 256, padding: None, feedback: 248
+                       { 16777720, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E-6B" },
+                       // block size: 256, key size: 256, padding: None, feedback: 256
+                       { 16777728, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E-6B-13" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 8
+                       { 16777736, "39-E9" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 16
+                       { 16777744, "39-DC-EF-5B" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 24
+                       { 16777752, "39-DC-83-D8-1B-92" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 32
+                       { 16777760, "39-DC-83-8B-66-B9-90-66" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 40
+                       { 16777768, "39-DC-83-8B-BB-12-12-5C-29-DA" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 48
+                       { 16777776, "39-DC-83-8B-BB-4D-8D-95-06-B0-1E-B5" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 56
+                       { 16777784, "39-DC-83-8B-BB-4D-1C-32-B3-F3-F8-BD-1F-FD" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 64
+                       { 16777792, "39-DC-83-8B-BB-4D-1C-C3-6D-5E-30-62-F1-47-A1-32" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 72
+                       { 16777800, "39-DC-83-8B-BB-4D-1C-C3-AB-FF-89-C5-A2-14-B9-79-7D-05" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 80
+                       { 16777808, "39-DC-83-8B-BB-4D-1C-C3-AB-41-62-28-8B-FD-AD-D4-90-AE-CE-B2" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 88
+                       { 16777816, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-45-0E-FB-81-78-A6-93-19-B4-0F-F2" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 96
+                       { 16777824, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-E4-EA-52-CB-EF-1B-60-CC-13-8B-FF-66" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 104
+                       { 16777832, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-68-97-6F-E3-7F-17-3C-44-DE-64-C0-DA-AB" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 112
+                       { 16777840, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-D5-B7-80-1C-FE-B0-E4-73-01-F5-9A-16-2E-C4" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 120
+                       { 16777848, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-CB-E1-28-DD-4B-D7-CB-48-9B-26-3C-E4-B6-95-D7" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 128
+                       { 16777856, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-18-07-EB-8B-D2-ED-E8-29-6B-C7-50-23-87-BE-E6-9D" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 136
+                       { 16777864, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-24-90-D0-81-3A-7A-E5-D6-9A-58-BE-B5-E1-D2-E2-D9-74" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 144
+                       { 16777872, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-75-86-C1-4B-48-D6-BD-9D-E5-D4-F7-22-57-0A-97-8B-A7-52" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 152
+                       { 16777880, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-2B-7C-A1-58-6A-47-F3-6A-D0-AD-C7-CC-47-2B-05-9F-88-7C-9A" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 160
+                       { 16777888, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-A7-2F-4D-1B-11-B8-47-0D-77-36-5C-76-0D-5F-1E-56-98-79-9D-20" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 168
+                       { 16777896, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-44-B6-9E-59-4F-65-BC-BE-4F-8B-C1-1A-2C-B5-C1-C5-4A-5C-4C-C1-96" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 176
+                       { 16777904, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-73-7B-FF-E6-5B-40-22-21-8C-1A-3D-56-EF-6F-48-A6-0E-86-AE-CF-C9-F3" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 184
+                       { 16777912, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-4C-20-D4-76-18-A3-BD-8D-B0-77-53-34-C3-0F-D4-D0-64-F0-D7-39-EE-6C-8A" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 192
+                       { 16777920, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-BB-47-AA-FE-39-A5-B2-92-4B-62-4C-8C-09-60-36-96-B0-D4-FC-09-3C-F4-D9-3E" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 200
+                       { 16777928, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-17-0A-6C-A5-49-D7-5F-9E-64-C6-99-67-02-69-0A-6D-D3-EB-BF-7D-DC-FB-BD-11-B7" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 208
+                       { 16777936, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-A1-B0-3C-DD-27-0C-3C-71-58-5A-C8-F7-EE-F9-DA-58-0A-72-04-D7-7B-9B-0B-7F-94-C2" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 216
+                       { 16777944, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-46-D8-85-76-B5-C1-74-7B-A1-3A-DB-C8-D1-40-3E-C1-B3-28-B8-35-0E-47-B2-ED-F9-C9-E4" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 224
+                       { 16777952, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-0C-48-AD-D0-95-17-A0-6C-BD-D7-16-EE-81-DB-2B-ED-5E-3F-2A-B5-0C-1C-ED-AF-CF-97-CD-84" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 232
+                       { 16777960, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-3A-CC-5D-D8-98-AB-64-D5-9C-D8-5E-1B-C8-4E-0D-A4-9C-8C-47-03-82-91-9A-B0-F9-73-49-57-F2" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 240
+                       { 16777968, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E-28-DB-F5-1A-40-D3-1B-1E-53-52-1A-35-63-17-9D-CC-A1-BE-9D-60-22-E2-6B-48-E9-4D-2E-5F-AB-CE" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 248
+                       { 16777976, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E-6B-E3-E6-00-41-D1-29-8F-59-86-BD-CD-C7-04-16-5B-44-67-71-A2-92-00-08-5D-98-FB-5B-15-6A-65-A4-C8" },
+                       // block size: 256, key size: 256, padding: PKCS7, feedback: 256
+                       { 16777984, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E-6B-13-45-8F-5D-DD-68-EE-57-8C-E3-9A-56-72-CE-97-DD-66-44-D2-E8-9A-F0-2A-11-9D-73-97-7E-EC-98-53-72-6E" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 8
+                       { 16777992, "39" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 16
+                       { 16778000, "39-DC" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 24
+                       { 16778008, "39-DC-83" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 32
+                       { 16778016, "39-DC-83-8B" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 40
+                       { 16778024, "39-DC-83-8B-BB" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 48
+                       { 16778032, "39-DC-83-8B-BB-4D" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 56
+                       { 16778040, "39-DC-83-8B-BB-4D-1C" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 64
+                       { 16778048, "39-DC-83-8B-BB-4D-1C-C3" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 72
+                       { 16778056, "39-DC-83-8B-BB-4D-1C-C3-AB" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 80
+                       { 16778064, "39-DC-83-8B-BB-4D-1C-C3-AB-41" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 88
+                       { 16778072, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 96
+                       { 16778080, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 104
+                       { 16778088, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 112
+                       { 16778096, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 120
+                       { 16778104, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 128
+                       { 16778112, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 136
+                       { 16778120, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 144
+                       { 16778128, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 152
+                       { 16778136, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 160
+                       { 16778144, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 168
+                       { 16778152, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 176
+                       { 16778160, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 184
+                       { 16778168, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 192
+                       { 16778176, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 200
+                       { 16778184, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 208
+                       { 16778192, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 216
+                       { 16778200, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 224
+                       { 16778208, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 232
+                       { 16778216, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 240
+                       { 16778224, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 248
+                       { 16778232, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E-6B" },
+                       // block size: 256, key size: 256, padding: Zeros, feedback: 256
+                       { 16778240, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E-6B-13" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 8
+                       { 16778248, "39-E9" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 16
+                       { 16778256, "39-DC-ED-5B" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 24
+                       { 16778264, "39-DC-83-DB-18-92" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 32
+                       { 16778272, "39-DC-83-8B-62-BD-94-66" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 40
+                       { 16778280, "39-DC-83-8B-BB-17-17-59-2C-DA" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 48
+                       { 16778288, "39-DC-83-8B-BB-4D-8B-93-00-B6-18-B5" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 56
+                       { 16778296, "39-DC-83-8B-BB-4D-1C-35-B4-F4-FF-BA-18-FD" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 64
+                       { 16778304, "39-DC-83-8B-BB-4D-1C-C3-65-56-38-6A-F9-4F-A9-32" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 72
+                       { 16778312, "39-DC-83-8B-BB-4D-1C-C3-AB-F6-80-CC-AB-1D-B0-70-74-05" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 80
+                       { 16778320, "39-DC-83-8B-BB-4D-1C-C3-AB-41-68-22-81-F7-A7-DE-9A-A4-C4-B2" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 88
+                       { 16778328, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-4E-05-F0-8A-73-AD-98-12-BF-04-F2" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 96
+                       { 16778336, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-E8-E6-5E-C7-E3-17-6C-C0-1F-87-F3-66" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 104
+                       { 16778344, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-65-9A-62-EE-72-1A-31-49-D3-69-CD-D7-AB" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 112
+                       { 16778352, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-DB-B9-8E-12-F0-BE-EA-7D-0F-FB-94-18-20-C4" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 120
+                       { 16778360, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-C4-EE-27-D2-44-D8-C4-47-94-29-33-EB-B9-9A-D7" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 128
+                       { 16778368, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-08-17-FB-9B-C2-FD-F8-39-7B-D7-40-33-97-AE-F6-9D" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 136
+                       { 16778376, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-35-81-C1-90-2B-6B-F4-C7-8B-49-AF-A4-F0-C3-F3-C8-74" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 144
+                       { 16778384, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-67-94-D3-59-5A-C4-AF-8F-F7-C6-E5-30-45-18-85-99-B5-52" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 152
+                       { 16778392, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-38-6F-B2-4B-79-54-E0-79-C3-BE-D4-DF-54-38-16-8C-9B-6F-9A" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 160
+                       { 16778400, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-B3-3B-59-0F-05-AC-53-19-63-22-48-62-19-4B-0A-42-8C-6D-89-20" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 168
+                       { 16778408, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-51-A3-8B-4C-5A-70-A9-AB-5A-9E-D4-0F-39-A0-D4-D0-5F-49-59-D4-96" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 176
+                       { 16778416, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-65-6D-E9-F0-4D-56-34-37-9A-0C-2B-40-F9-79-5E-B0-18-90-B8-D9-DF-F3" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 184
+                       { 16778424, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-5B-37-C3-61-0F-B4-AA-9A-A7-60-44-23-D4-18-C3-C7-73-E7-C0-2E-F9-7B-8A" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 192
+                       { 16778432, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-A3-5F-B2-E6-21-BD-AA-8A-53-7A-54-94-11-78-2E-8E-A8-CC-E4-11-24-EC-C1-3E" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 200
+                       { 16778440, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-0E-13-75-BC-50-CE-46-87-7D-DF-80-7E-1B-70-13-74-CA-F2-A6-64-C5-E2-A4-08-B7" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 208
+                       { 16778448, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-BB-AA-26-C7-3D-16-26-6B-42-40-D2-ED-F4-E3-C0-42-10-68-1E-CD-61-81-11-65-8E-C2" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 216
+                       { 16778456, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-5D-C3-9E-6D-AE-DA-6F-60-BA-21-C0-D3-CA-5B-25-DA-A8-33-A3-2E-15-5C-A9-F6-E2-D2-E4" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 224
+                       { 16778464, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-10-54-B1-CC-89-0B-BC-70-A1-CB-0A-F2-9D-C7-37-F1-42-23-36-A9-10-00-F1-B3-D3-8B-D1-84" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 232
+                       { 16778472, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-27-D1-40-C5-85-B6-79-C8-81-C5-43-06-D5-53-10-B9-81-91-5A-1E-9F-8C-87-AD-E4-6E-54-4A-F2" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 240
+                       { 16778480, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E-36-C5-EB-04-5E-CD-05-00-4D-4C-04-2B-7D-09-83-D2-BF-A0-83-7E-3C-FC-75-56-F7-53-30-41-B5-CE" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 248
+                       { 16778488, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E-6B-FC-F9-1F-5E-CE-36-90-46-99-A2-D2-D8-1B-09-44-5B-78-6E-BD-8D-1F-17-42-87-E4-44-0A-75-7A-BB-C8" },
+                       // block size: 256, key size: 256, padding: ANSIX923, feedback: 256
+                       { 16778496, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E-6B-13-65-AF-7D-FD-48-CE-77-AC-C3-BA-76-52-EE-B7-FD-46-64-F2-C8-BA-D0-0A-31-BD-53-B7-5E-CC-B8-73-52-6E" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 8
+                       { 16778504, "39-E9" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 16
+                       { 16778512, "39-DC-0C-5B" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 24
+                       { 16778520, "39-DC-83-40-BB-92" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 32
+                       { 16778528, "39-DC-83-8B-BE-A1-7B-66" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 40
+                       { 16778536, "39-DC-83-8B-BB-8C-FF-7F-4A-DA" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 48
+                       { 16778544, "39-DC-83-8B-BB-4D-C5-FD-2F-CB-B2-B5" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 56
+                       { 16778552, "39-DC-83-8B-BB-4D-1C-68-29-C4-65-46-62-FD" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 64
+                       { 16778560, "39-DC-83-8B-BB-4D-1C-C3-70-0D-85-84-EB-C0-35-32" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 72
+                       { 16778568, "39-DC-83-8B-BB-4D-1C-C3-AB-1A-36-C3-E5-1F-5B-3F-4F-05" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 80
+                       { 16778576, "39-DC-83-8B-BB-4D-1C-C3-AB-41-80-F5-3B-C4-1E-8F-74-FF-12-B2" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 88
+                       { 16778584, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-C2-EF-6B-C1-BA-BF-45-59-13-01-F2" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 96
+                       { 16778592, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-31-1D-B8-DF-52-6D-C5-0C-FF-6F-DD-66" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 104
+                       { 16778600, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-F9-7A-79-D1-05-DC-AF-9C-B3-A9-1D-B3-AB" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 112
+                       { 16778608, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-BD-15-F7-EC-8C-DC-FC-C3-DC-68-05-92-5B-C4" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 120
+                       { 16778616, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-45-4D-A6-32-6D-C7-09-F9-8E-D0-FF-B2-5B-99-D7" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 128
+                       { 16778624, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-27-6C-51-C4-8E-C5-3D-FD-D1-51-B2-C5-DA-63-56-9D" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 136
+                       { 16778632, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-12-FA-86-90-3A-6B-34-02-06-B5-73-CD-DF-2A-2C-9E-74" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 144
+                       { 16778640, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-77-43-6B-8E-B1-EC-CD-35-D5-C7-62-3B-FC-A4-F7-90-E5-52" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 152
+                       { 16778648, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-BF-D1-DC-26-88-36-BC-20-29-73-12-D2-1F-63-80-DA-88-71-9A" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 160
+                       { 16778656, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-05-2A-66-ED-C1-64-2C-40-57-89-B1-7A-45-E4-64-45-0E-A3-BB-20" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 168
+                       { 16778664, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-FA-4C-C7-96-C2-1B-2F-FF-39-13-7A-AC-48-59-66-C1-10-92-05-70-96" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 176
+                       { 16778672, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-80-37-5F-E2-64-EE-82-56-53-04-83-E7-54-8F-A5-63-40-CE-D1-4C-56-F3" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 184
+                       { 16778680, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-26-38-11-2E-CD-2B-05-40-6A-F4-45-15-0D-82-8C-D6-AE-BB-37-22-19-CC-8A" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 192
+                       { 16778688, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-A9-FF-97-82-8C-93-FD-A6-3F-22-F0-AF-B5-AF-A1-3A-14-64-62-FD-E4-41-61-3E" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 200
+                       { 16778696, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-53-08-7F-74-F9-D6-9F-4B-B8-62-51-15-9E-C0-FE-7B-80-37-4B-28-86-C7-6C-43-B7" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 208
+                       { 16778704, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-ED-17-01-6B-58-57-4D-A9-EB-53-74-C4-A6-E3-39-E8-D3-18-42-4E-78-FA-8B-29-31-C2" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 216
+                       { 16778712, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-10-94-40-86-0D-88-96-25-BE-76-6B-B2-9E-42-39-95-62-BE-0F-83-4E-CC-49-E6-B4-D5-E4" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 224
+                       { 16778720, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-5B-3B-FA-86-80-44-C8-3C-06-79-1B-F8-EF-EA-78-69-79-70-45-02-4B-9C-4A-C4-FF-4B-98-84" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 232
+                       { 16778728, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-9C-F5-4E-C6-22-B9-91-C8-9C-75-BE-26-03-2D-65-0B-F5-16-96-A8-AC-FD-2C-83-7E-B8-75-81-F2" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 240
+                       { 16778736, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E-22-0C-98-DC-7A-B5-1B-21-41-08-6D-E1-9E-43-05-5A-E2-6E-70-E5-9F-D0-F8-70-24-0E-55-8B-D1-CE" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 248
+                       { 16778744, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E-6B-EF-A3-AC-C7-61-C9-8B-35-82-BB-7C-06-A9-7E-95-C8-EA-A1-D1-9F-19-22-C2-31-6D-D5-CA-77-02-8C-C8" },
+                       // block size: 256, key size: 256, padding: ISO10126, feedback: 256
+                       { 16778752, "39-DC-83-8B-BB-4D-1C-C3-AB-41-8D-91-D4-7C-5A-F7-C9-18-CE-8A-32-40-53-31-EF-75-84-C7-42-1E-6B-13-F0-8B-16-2C-C5-72-EA-0B-85-4C-65-39-0B-46-8D-42-49-E2-DD-7F-57-3F-5B-18-84-71-9A-59-02-A4-02-6E" },
+               };
+       }
+}
\ No newline at end of file
index 4e387d95917acd14e328d57efecda0a5f6187296..2d9795ade100389d8cf10d5248ec714903ddd60b 100644 (file)
@@ -222,7 +222,6 @@ namespace MonoTests.System.Security.Cryptography {
 
                [Test]
                [ExpectedException (typeof (CryptographicException))]
-               [Category ("NotWorking")] // data is bad but no exception is thrown
                public void CreateDecryptor_KeyNull ()
                {
                        ICryptoTransform encryptor = aes.CreateEncryptor (aes.Key, aes.IV);
@@ -309,7 +308,6 @@ namespace MonoTests.System.Security.Cryptography {
                [ExpectedException (typeof (CryptographicException))]
                // Rijndael is the only implementation that has
                // this behaviour for IV that are too large
-               [Category ("NotWorking")]
                public void CreateEncryptor_IV_TooBig ()
                {
                        int size = aes.BlockSize; // 8 times too big
@@ -357,7 +355,6 @@ namespace MonoTests.System.Security.Cryptography {
                [ExpectedException (typeof (CryptographicException))]
                // Rijndael is the only implementation that has
                // this behaviour for IV that are too large
-               [Category ("NotWorking")]
                public void CreateDecryptor_IV_TooBig ()
                {
                        int size = aes.BlockSize; // 8 times too big
@@ -380,11 +377,11 @@ namespace MonoTests.System.Security.Cryptography {
                                aes.IV = new byte [16];
                                using (ICryptoTransform encryptor = aes.CreateEncryptor ())
                                        encdata = encryptor.TransformFinalBlock (original, 0, original.Length);
-                               Assert.AreEqual (encdata.Length, size, "enc.Length");
-                               Assert.AreEqual (encdata, expected, "encrypted");
+                               Assert.AreEqual (size, encdata.Length, "enc.Length");
+                               Assert.AreEqual (BitConverter.ToString (expected), BitConverter.ToString (encdata), "encrypted");
                                using (ICryptoTransform decryptor = aes.CreateDecryptor ())
                                        decdata = decryptor.TransformFinalBlock (encdata, 0, encdata.Length);
-                               Assert.AreEqual (decdata, original, "roundtrip");
+                               Assert.AreEqual (original, decdata, "roundtrip");
                        }
                }
        }
index a45dc64d1f4b86a4f614aeffa509f0f6336a2237..ea5c32c15f99ff9f41229f64267a1e1a8b60a343 100644 (file)
@@ -194,6 +194,13 @@ public class RijndaelTest {
                        }
                }
        }
+
+       [Test]
+       [ExpectedException (typeof (CryptographicException))]
+       public void FeedbackSize_NotMultipleOf8 ()
+       {
+               aes.FeedbackSize = 9;
+       }
 }
 
 }
diff --git a/mcs/class/corlib/Test/System.Security.Cryptography/TripleDesCfbTest.cs b/mcs/class/corlib/Test/System.Security.Cryptography/TripleDesCfbTest.cs
new file mode 100644 (file)
index 0000000..87eaced
--- /dev/null
@@ -0,0 +1,81 @@
+//
+// TripleDES CFB Unit Tests 
+//
+// Author:
+//     Sebastien Pouliot  <sebastien@xamarin.com>
+//
+// Copyright (C) 2013 Xamarin Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Security.Cryptography;
+
+using NUnit.Framework;
+
+namespace MonoTests.System.Security.Cryptography {
+       
+       [TestFixture]
+       public class TripleDesCbcTests : WeakKeyCfbTests {
+               
+               protected override SymmetricAlgorithm GetInstance ()
+               {
+                       return TripleDES.Create ();
+               }
+               
+               [Test]
+               public void Roundtrip ()
+               {
+                       ProcessBlockSizes (GetInstance ());
+               }
+
+               static Dictionary<int, string> test_vectors = new Dictionary<int, string> () {
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 128, padding: PKCS7, feedback: 8
+                       { 1082130952, "22-5F-A0-55-22-6A-CD-8E" },
+                       // block size: 64, key size: 128, padding: Zeros, feedback: 8
+                       { 1082131208, "22-58-26-57-F6-3E-FF-C4" },
+                       // block size: 64, key size: 128, padding: ANSIX923, feedback: 8
+                       { 1082131464, "22-58-26-57-F6-3E-FF-C3" },
+                       // block size: 64, key size: 128, padding: ISO10126, feedback: 8
+                       { 1082131720, "22-86-F5-46-69-D1-49-C2" },
+                       // padding None : Length of the data to encrypt is invalid.
+                       // block size: 64, key size: 192, padding: PKCS7, feedback: 8
+                       { 1086325256, "76-50-58-98-3F-4F-BE-F3" },
+                       // block size: 64, key size: 192, padding: Zeros, feedback: 8
+                       { 1086325512, "76-57-62-F7-E3-0C-5A-3B" },
+                       // block size: 64, key size: 192, padding: ANSIX923, feedback: 8
+                       { 1086325768, "76-57-62-F7-E3-0C-5A-3C" },
+                       // block size: 64, key size: 192, padding: ISO10126, feedback: 8
+                       { 1086326024, "76-6E-F9-2B-AB-AD-30-E3" },
+               };
+               
+               protected override string GetExpectedResult (SymmetricAlgorithm algo, byte [] encryptedData)
+               {
+#if false
+                       return base.GetExpectedResult (algo, encryptedData);
+#else
+                       return test_vectors [GetId (algo)];
+#endif
+               }
+       }
+}
\ No newline at end of file
index 2d96507b46ea5cd484e356d79faf8978dae3b92d..e99dc8577bf46f42acb72bd3f67b1e9c0a5c7298 100644 (file)
@@ -225,11 +225,14 @@ System.Security.AccessControl/RawSecurityDescriptorTest.cs
 System.Security.AccessControl/RegistrySecurityTest.cs
 System.Security.AccessControl/SystemAclTest.cs
 System.Security.Cryptography/AllTests2.cs
+System.Security.Cryptography/AesCfbTest.cs
 System.Security.Cryptography/AsymmetricAlgorithmTest.cs
 System.Security.Cryptography/CipherModeTest.cs
+System.Security.Cryptography/CfbTest.cs
 System.Security.Cryptography/CryptoConfigTest.cs
 System.Security.Cryptography/CryptoStreamTest.cs
 System.Security.Cryptography/CspProviderFlagsTest.cs
+System.Security.Cryptography/DesCfbTest.cs
 System.Security.Cryptography/DESCryptoServiceProviderTest.cs
 System.Security.Cryptography/DESTest.cs
 System.Security.Cryptography/DSACryptoServiceProviderTest.cs
@@ -251,9 +254,11 @@ System.Security.Cryptography/PaddingModeTest.cs
 System.Security.Cryptography/PasswordDeriveBytesTest.cs
 System.Security.Cryptography/PKCS1MaskGenerationMethodTest.cs
 System.Security.Cryptography/RandomNumberGeneratorTest.cs
+System.Security.Cryptography/Rc2CfbTest.cs
 System.Security.Cryptography/RC2CryptoServiceProviderTest.cs
 System.Security.Cryptography/RC2Test.cs
 System.Security.Cryptography/Rfc2898DeriveBytesTest.cs
+System.Security.Cryptography/RijndaelCfbTest.cs
 System.Security.Cryptography/RijndaelManagedTest.cs
 System.Security.Cryptography/RijndaelTest.cs
 System.Security.Cryptography/RIPEMD160ManagedTest.cs
@@ -281,6 +286,7 @@ System.Security.Cryptography/SymmetricAlgorithm2Test.cs
 System.Security.Cryptography/SymmetricAlgorithmTransformTest.cs
 System.Security.Cryptography/ToBase64TransformTest.cs
 System.Security.Cryptography/TripleDESCryptoServiceProviderTest.cs
+System.Security.Cryptography/TripleDesCfbTest.cs
 System.Security.Cryptography/TripleDESTest.cs
 System.Security.Cryptography.X509Certificates/X509CapiTest.cs
 System.Security.Cryptography.X509Certificates/X509CertificateTest.cs
diff --git a/mcs/errors/cs0579-13.cs b/mcs/errors/cs0579-13.cs
new file mode 100644 (file)
index 0000000..f2edce1
--- /dev/null
@@ -0,0 +1,26 @@
+// CS0579: The attribute `ConditionalAttributeTesting.SomeAttribute' cannot be applied multiple times
+// Line: 12
+
+using System;
+using System.Diagnostics;
+
+namespace ConditionalAttributeTesting
+{
+       class MainClass
+       {
+               [Some ("Test")]
+               [Some ("Test2")]
+               public static void Test ()
+               {
+               }
+       }
+
+       [AttributeUsage (AttributeTargets.All)]
+       [Conditional ("NOT_DEFINED")]
+       public sealed class SomeAttribute : Attribute
+       {
+               public SomeAttribute (string someText)
+               {
+               }
+       }
+}
\ No newline at end of file
diff --git a/mcs/errors/cs1501-14.cs b/mcs/errors/cs1501-14.cs
new file mode 100644 (file)
index 0000000..991088d
--- /dev/null
@@ -0,0 +1,17 @@
+// CS1501: No overload for method `Foo' takes `0' arguments
+// Line: 15
+
+using System;
+using System.Runtime.InteropServices;
+
+public class C
+{
+       public static void Foo ([DefaultParameterValue(null)] string s)
+       {
+       }
+
+       public static void Main ()
+       {
+               Foo ();
+       }
+}
index ebece56f6e22d297958d309a6e96f7ee34cee014..eb998caca39da239e5144a39f5e9bc9a02a34270 100644 (file)
@@ -173,7 +173,7 @@ namespace Mono.CSharp {
                        if (NamedArguments == null)
                                named_args = new Arguments (1);
 
-                       var value = Constant.CreateConstant (rc.Module.PredefinedTypes.CharSet.TypeSpec, rc.Module.DefaultCharSet, Location);
+                       var value = Constant.CreateConstantFromValue (rc.Module.PredefinedTypes.CharSet.TypeSpec, rc.Module.DefaultCharSet, Location);
                        NamedArguments.Add (new NamedArgument (dll_import_char_set, loc, value));
                }
 
@@ -1055,15 +1055,17 @@ namespace Mono.CSharp {
                                cdata = encoder.ToArray ();
                        }
 
-                       try {
-                               foreach (Attributable target in targets)
-                                       target.ApplyAttributeBuilder (this, ctor, cdata, predefined);
-                       } catch (Exception e) {
-                               if (e is BadImageFormat && Report.Errors > 0)
-                                       return;
+                       if (!ctor.DeclaringType.IsConditionallyExcluded (context, Location)) {
+                               try {
+                                       foreach (Attributable target in targets)
+                                               target.ApplyAttributeBuilder (this, ctor, cdata, predefined);
+                               } catch (Exception e) {
+                                       if (e is BadImageFormat && Report.Errors > 0)
+                                               return;
 
-                               Error_AttributeEmitError (e.Message);
-                               return;
+                                       Error_AttributeEmitError (e.Message);
+                                       return;
+                               }
                        }
 
                        if (!usage_attr.AllowMultiple && allEmitted != null) {
index e13e300f35c75e10c1c629c8c6b2a52dfd1b5d13..acfb6a751f8e2937b7d6296c8e7cea30b848cd80 100644 (file)
@@ -103,17 +103,12 @@ namespace Mono.CSharp {
                                  TypeManager.CSharpName (Type), TypeManager.CSharpName (type));
                        }
 
-                       return CreateConstant (type, constant_value, loc);
+                       return CreateConstantFromValue (type, constant_value, loc);
                }
 
                //
                //  Returns a constant instance based on Type
                //
-               public static Constant CreateConstant (TypeSpec t, object v, Location loc)
-               {
-                       return CreateConstantFromValue (t, v, loc);
-               }
-
                public static Constant CreateConstantFromValue (TypeSpec t, object v, Location loc)
                {
                        switch (t.BuiltinType) {
index e990acb244ea9586af2c472696b8c2061f6c75b2..8f4beda22b4afc15d454dabb1f8195cc7e9eccc6 100644 (file)
@@ -4373,7 +4373,8 @@ namespace Mono.CSharp {
                                }
 
                                candidate = ms;
-                               ptypes = ms.Parameters.Types;
+                               pd = ms.Parameters;
+                               ptypes = pd.Types;
                        } else {
                                if (type_arguments != null)
                                        return int.MaxValue - 15000;
@@ -4403,6 +4404,13 @@ namespace Mono.CSharp {
                                        Expression e = fp.DefaultValue;
                                        if (e != null) {
                                                e = ResolveDefaultValueArgument (ec, ptypes[i], e, loc);
+                                               if (e == null) {
+                                                       // Restore for possible error reporting
+                                                       for (int ii = i; ii < arg_count; ++ii)
+                                                               arguments.RemoveAt (i);
+
+                                                       return (arg_count - i) * 2 + 1;
+                                               }
                                        }
 
                                        if ((fp.ModFlags & Parameter.Modifier.CallerMask) != 0) {
@@ -4508,23 +4516,15 @@ namespace Mono.CSharp {
                                        new QualifiedAliasMember (QualifiedAliasMember.GlobalAlias, "System", loc), "Reflection", loc), "Missing", loc), "Value", loc);
                        } else if (e is Constant) {
                                //
-                               // Handles int to int? conversions
+                               // Handles int to int? conversions, DefaultParameterValue check
                                //
                                e = Convert.ImplicitConversionStandard (ec, e, ptype, loc);
-
-                               //
-                               // When constant type paramter contains type argument
-                               //
-                               // Foo (T[] arg = null)
-                               //
-                               if (e == null) {
-                                       e = new DefaultValueExpression (new TypeExpression (ptype, loc), loc);
-                               }
+                               if (e == null)
+                                       return null;
                        } else {
                                e = new DefaultValueExpression (new TypeExpression (ptype, loc), loc);
                        }
 
-
                        return e.Resolve (ec);
                }
 
@@ -5263,7 +5263,7 @@ namespace Mono.CSharp {
                        var c = constant.GetConstant (rc);
 
                        // Creates reference expression to the constant value
-                       return Constant.CreateConstant (constant.MemberType, c.GetValue (), loc);
+                       return Constant.CreateConstantFromValue (constant.MemberType, c.GetValue (), loc);
                }
 
                public override void Emit (EmitContext ec)
index 7fa5df1ac83b5682ff71205915a61c3d87de322a..36b3431f8d89d66cd884b75f89601c2ee57096d7 100644 (file)
@@ -510,7 +510,7 @@ namespace Mono.CSharp
                                                var ptype = types[i];
                                                if ((p.Attributes & ParameterAttributes.HasDefault) != 0 && ptype.Kind != MemberKind.TypeParameter && (value != null || TypeSpec.IsReferenceType (ptype))) {
                                                        if (value == null) {
-                                                               default_value = Constant.CreateConstant (ptype, null, Location.Null);
+                                                               default_value = Constant.CreateConstantFromValue (ptype, null, Location.Null);
                                                        } else {
                                                                default_value = ImportParameterConstant (value);
 
index d7a6c1638d3e2fcc7ecb94da3786e9d2f079821c..788bbfbeb8e5cd3aaed4114ae1ac2e2508d80a7d 100644 (file)
@@ -68,6 +68,9 @@ namespace Mono.CSharp.Nullable
                                MemberFilter.Method ("GetValueOrDefault", 0, ParametersCompiled.EmptyReadOnlyParameters, null), BindingRestriction.None);
                }
 
+               //
+               // Don't use unless really required for correctness, see Unwrap::Emit
+               //
                public static MethodSpec GetValue (TypeSpec nullableType)
                {
                        return (MethodSpec) MemberCache.FindMember (nullableType,
@@ -142,6 +145,11 @@ namespace Mono.CSharp.Nullable
                        var call = new CallEmitter ();
                        call.InstanceExpression = this;
 
+                       //
+                       // Using GetGetValueOrDefault is prefered because JIT can possibly
+                       // inline it whereas Value property contains a throw which is very
+                       // unlikely to be inlined
+                       //
                        if (useDefaultValue)
                                call.EmitPredefined (ec, NullableInfo.GetGetValueOrDefault (expr.Type), null);
                        else
@@ -1256,7 +1264,7 @@ namespace Mono.CSharp.Nullable
 
                        call = new CallEmitter ();
                        call.InstanceExpression = lt;
-                       call.EmitPredefined (ec, NullableInfo.GetValue (expr.Type), null);
+                       call.EmitPredefined (ec, NullableInfo.GetGetValueOrDefault (expr.Type), null);
 
                        lt.Release (ec);
 
index 982785ff3c3fa799600b6e95b199466528b24201..75a7bb73db0afe40c9e2f8f70753dd0555d7810f 100644 (file)
@@ -932,9 +932,14 @@ namespace Mono.CSharp {
                                        if (inflated_param == types[i])
                                                continue;
 
-                                       default_value |= FixedParameters[i] is DefaultValueExpression;
+                                       default_value |= FixedParameters[i].HasDefaultValue;
                                        inflated_types = new TypeSpec[types.Length];
-                                       Array.Copy (types, inflated_types, types.Length);       
+                                       Array.Copy (types, inflated_types, types.Length);
+                               } else {
+                                       if (inflated_param == types[i])
+                                               continue;
+
+                                       default_value |= FixedParameters[i].HasDefaultValue;
                                }
 
                                inflated_types[i] = inflated_param;
@@ -945,13 +950,34 @@ namespace Mono.CSharp {
 
                        var clone = (AParametersCollection) MemberwiseClone ();
                        clone.types = inflated_types;
+
+                       //
+                       // Default expression is original expression from the parameter
+                       // declaration context which can be of nested enum in generic class type.
+                       // In such case we end up with expression type of G<T>.E and e.g. parameter
+                       // type of G<int>.E and conversion would fail without inflate in this
+                       // context.
+                       //
                        if (default_value) {
+                               clone.parameters = new IParameterData[Count];
                                for (int i = 0; i < Count; ++i) {
-                                       var dve = clone.FixedParameters[i] as DefaultValueExpression;
-                                       if (dve != null) {
-                                               throw new NotImplementedException ("net");
-                                               //      clone.FixedParameters [i].DefaultValue = new DefaultValueExpression ();
-                                       }
+                                       var fp = FixedParameters[i];
+                                       clone.FixedParameters[i] = fp;
+
+                                       if (!fp.HasDefaultValue)
+                                               continue;
+
+                                       var expr = fp.DefaultValue;
+
+                                       if (inflated_types[i] == expr.Type)
+                                               continue;
+
+                                       if (expr is DefaultValueExpression)
+                                               expr = new DefaultValueExpression (new TypeExpression (inflated_types[i], expr.Location), expr.Location);
+                                       else if (expr is Constant)
+                                               expr = Constant.CreateConstantFromValue (inflated_types[i], ((Constant) expr).GetValue (), expr.Location);
+
+                                       clone.FixedParameters[i] = new ParameterData (fp.Name, fp.ModFlags, expr);
                                }
                        }
 
index a2a0100ce6b6aeb356330a70cd720034119f5135..fbab6410132587107ca8841ebb7ee4013f93ca60 100644 (file)
@@ -147,10 +147,6 @@ public static class InterfaceTester
        static readonly Type generic_icollection_type;
        static readonly Type generic_ienumerable_type;
        static readonly Type icloneable_type;
-#if NET_4_0
-       static readonly Type istructuralequatable_type = typeof (IStructuralEquatable);
-       static readonly Type istructuralcomparable_type = typeof (IStructuralComparable);
-#endif
 
        static InterfaceTester ()
        {
@@ -177,10 +173,9 @@ public static class InterfaceTester
                ifaces.Add (ienumerable_type, State.Missing);
                ifaces.Add (icloneable_type, State.Missing);
 #if NET_4_0
-               ifaces.Add (istructuralequatable_type, State.Missing);
-               ifaces.Add (istructuralcomparable_type, State.Missing);
+               ifaces.Add (typeof (IStructuralEquatable), State.Missing);
+               ifaces.Add (typeof (IStructuralComparable), State.Missing);
 #endif
-
                Type array_type = t.MakeArrayType ();
 
                if (Debug) {
@@ -194,6 +189,11 @@ public static class InterfaceTester
                        ifaces.Add (generic_ilist_type.MakeGenericType (gargs), State.Missing);
                        ifaces.Add (generic_icollection_type.MakeGenericType (gargs), State.Missing);
                        ifaces.Add (generic_ienumerable_type.MakeGenericType (gargs), State.Missing);
+
+#if NET_4_5
+                       ifaces.Add (typeof (IReadOnlyCollection<>).MakeGenericType (gargs), State.Missing);
+                       ifaces.Add (typeof (IReadOnlyList<>).MakeGenericType (gargs), State.Missing);
+#endif
                }
 
                foreach (Type iface in array_type.GetInterfaces ()) {
diff --git a/mcs/tests/gtest-optional-27.cs b/mcs/tests/gtest-optional-27.cs
new file mode 100644 (file)
index 0000000..50558c2
--- /dev/null
@@ -0,0 +1,34 @@
+using System;
+
+class EnumWrapperCtor<T>
+{
+       public enum Test
+       {
+               Wrong,
+               MyDefault
+       }
+
+       readonly Test myVal;
+
+       public EnumWrapperCtor (Test value = Test.MyDefault)
+       {
+               myVal = value;
+       }
+
+       public Test getValue ()
+       {
+               return myVal;
+       }
+}
+
+public class C
+{
+       public static int Main ()
+       {
+               var ew = new EnumWrapperCtor<int> ();
+               if ((int) ew.getValue () != 1)
+                       return 1;
+
+               return 0;
+       }
+}
index 6a6fe619c604f637564b3415eb059637aed55871..6adaaeee0a9faa5ae3aced9a5ec81dc3c3e7087d 100644 (file)
@@ -27,6 +27,11 @@ test-555.cs SKIP
 #app domain
 test-795.cs SKIP
 
+#com test
+test-com-01.cs SKIP
+test-com-02.cs SKIP
+test-com-03.cs SKIP
+
 # Tests without ConfigureAwait (false)
 test-async-13.cs SKIP
 
diff --git a/mcs/tests/test-860.cs b/mcs/tests/test-860.cs
new file mode 100644 (file)
index 0000000..a87e624
--- /dev/null
@@ -0,0 +1,35 @@
+using System;
+using System.Reflection;
+using System.Diagnostics;
+
+namespace ConditionalAttributeTesting
+{
+       class MainClass
+       {
+               public static int Main ()
+               {
+                       return HelloWorld ();
+               }
+
+               [Some ("Test")]
+               public static int HelloWorld ()
+               {
+                       var methodInfo = MethodBase.GetCurrentMethod ();
+                       SomeAttribute someAttribute = Attribute.GetCustomAttribute (methodInfo, typeof (SomeAttribute)) as SomeAttribute;
+                       if (someAttribute != null) {
+                               return 1;
+                       }
+
+                       return 0;
+               }
+       }
+
+       [AttributeUsage (AttributeTargets.All)]
+       [Conditional ("NOT_DEFINED")]
+       public sealed class SomeAttribute : Attribute
+       {
+               public SomeAttribute (string someText)
+               {
+               }
+       }
+}
\ No newline at end of file
index f0e0583231faecba7e18303aa2fcd016f74a7b0d..9ebfc6519c17fcdb62cdc55740ea7530f29f0fe2 100644 (file)
@@ -1,6 +1,8 @@
 .assembly extern mscorlib { }
 
-.assembly 'test-443-lib' { }
+.assembly 'test-com-02-lib' { }
+
+.module 'test-com-02-lib.dll'
 
 .namespace Test {
 
index 94922baba0692f5fbb40d07a9802a0263ddf122c..a22273fcc65c0f29e4fefb1afc7228b45957b550 100644 (file)
@@ -2,13 +2,13 @@
 {
 }
 
-.assembly 'test-859-lib'
+.assembly 'test-com-03-lib'
 {
   .hash algorithm 0x00008004
   .ver  0:0:0:0
 }
 
-.module 'test-859-lib.dll'
+.module 'test-com-03-lib.dll'
 
 // Import flag enables more magic
 
index fafd7f7fb302b57eb411ec247bf4b6c5a1fd326b..e7040178f41d3f6b5d97e08a7c4839041cd30a4d 100644 (file)
@@ -1,4 +1,4 @@
-// Compiler options: -r:test-859-lib.dll
+// Compiler options: -r:test-com-03-lib.dll
 
 using System;
 
index 3365feed058e0d70ac4c8ebe294d53f6a7e09f49..dbed832dcfb05018ab0a0e43f74bec6a70c695f4 100644 (file)
     </type>\r
     <type name="InterfaceTester">\r
       <method name="Int32 Test(System.Type, System.Type[])" attrs="145">\r
-        <size>450</size>\r
+        <size>518</size>\r
       </method>\r
       <method name="Int32 Test()" attrs="150">\r
         <size>595</size>\r
       </method>\r
       <method name="Void .cctor()" attrs="6289">\r
-        <size>137</size>\r
+        <size>107</size>\r
       </method>\r
     </type>\r
     <type name="Z">\r
       </method>\r
     </type>\r
   </test>\r
+  <test name="gtest-optional-27.cs">\r
+    <type name="EnumWrapperCtor`1[T]">\r
+      <method name="Test getValue()" attrs="134">\r
+        <size>15</size>\r
+      </method>\r
+      <method name="Void .ctor(Test)" attrs="6278">\r
+        <size>15</size>\r
+      </method>\r
+    </type>\r
+    <type name="C">\r
+      <method name="Int32 Main()" attrs="150">\r
+        <size>36</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>7</size>\r
+      </method>\r
+    </type>\r
+  </test>\r
   <test name="gtest-partial-01.cs">\r
     <type name="B`1[U]">\r
       <method name="Void .ctor()" attrs="6278">\r
       </method>\r
     </type>\r
   </test>\r
+  <test name="test-860.cs">\r
+    <type name="ConditionalAttributeTesting.MainClass">\r
+      <method name="Int32 Main()" attrs="150">\r
+        <size>14</size>\r
+      </method>\r
+      <method name="Int32 HelloWorld()" attrs="150">\r
+        <size>52</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>7</size>\r
+      </method>\r
+    </type>\r
+    <type name="ConditionalAttributeTesting.SomeAttribute">\r
+      <method name="Void .ctor(String)" attrs="6278">\r
+        <size>8</size>\r
+      </method>\r
+    </type>\r
+  </test>\r
   <test name="test-87.cs">\r
     <type name="Top">\r
       <method name="Int32 Main()" attrs="150">\r
index 57b18ca662e936243e78c14908fb6cf87d26cc4a..eec2549513dba01f0eb3a00093c7bf45afdad883 100644 (file)
@@ -34,6 +34,11 @@ _wapi_lock_file_region (int fd, off_t offset, off_t length)
        struct flock lock_data;
        int ret;
 
+       if (offset < 0 || length < 0) {
+               SetLastError (ERROR_INVALID_PARAMETER);
+               return(FALSE);
+       }
+
        lock_data.l_type = F_WRLCK;
        lock_data.l_whence = SEEK_SET;
        lock_data.l_start = offset;
@@ -146,6 +151,10 @@ LockFile (gpointer handle, guint32 offset_low, guint32 offset_high,
 
        DEBUG ("%s: Locking handle %p, offset %lld, length %lld", __func__, handle, offset, length);
 #else
+       if (offset_high > 0 || length_high > 0) {
+               SetLastError (ERROR_INVALID_PARAMETER);
+               return (FALSE);
+       }
        offset = offset_low;
        length = length_low;
 
index 04ce7e331a50771506d4fe7b9f16d206b95d15a4..7c2bd3c29d6bd2cb1e54bfb983e266a8d56e6520 100644 (file)
@@ -75,7 +75,7 @@
  * Changes which are already detected at runtime, like the addition
  * of icalls, do not require an increment.
  */
-#define MONO_CORLIB_VERSION 108
+#define MONO_CORLIB_VERSION 109
 
 typedef struct
 {
index bd74d47a72a8e023a39aaa20437d9da3b1e4a109..bbc9348805d793ff2875db54c172fc11ad798d37 100644 (file)
@@ -282,6 +282,7 @@ struct _MonoClass {
         * to 1, because we know the instance size now. After that we 
         * initialise all static fields.
         */
+       /* size_inited is accessed without locks, so it needs a memory barrier */
        guint size_inited     : 1;
        guint valuetype       : 1; /* derives from System.ValueType */
        guint enumtype        : 1; /* derives from System.Enum */
@@ -319,6 +320,7 @@ struct _MonoClass {
        /* next byte */
        guint has_finalize_inited    : 1; /* has_finalize is initialized */
        guint fields_inited : 1; /* fields is initialized */
+       guint setup_fields_called : 1; /* to prevent infinite loops in setup_fields */
 
        guint8     exception_type;      /* MONO_EXCEPTION_* */
 
@@ -1082,6 +1084,7 @@ typedef struct {
        MonoClass *attribute_class;
        MonoClass *customattribute_data_class;
        MonoClass *critical_finalizer_object;
+       MonoClass *generic_ireadonlylist_class;
 } MonoDefaults;
 
 extern MonoDefaults mono_defaults MONO_INTERNAL;
index 6378847ba3a2e998f671ead8e91fd11819112c69..73e0a145e6d204e46b45bdb43921b19e2755aca3 100644 (file)
@@ -1421,7 +1421,7 @@ mono_class_setup_fields (MonoClass *class)
        MonoGenericContainer *container = NULL;
        MonoClass *gtd = class->generic_class ? mono_class_get_generic_type_definition (class) : NULL;
 
-       if (class->size_inited)
+       if (class->setup_fields_called)
                return;
 
        if (class->generic_class && class->generic_class->container_class->image->dynamic && !class->generic_class->container_class->wastypebuilder) {
@@ -1494,9 +1494,9 @@ mono_class_setup_fields (MonoClass *class)
                if (explicit_size && real_size) {
                        class->instance_size = MAX (real_size, class->instance_size);
                }
-               class->size_inited = 1;
                class->blittable = blittable;
                mono_memory_barrier ();
+               class->size_inited = 1;
                class->fields_inited = 1;
                return;
        }
@@ -1505,7 +1505,7 @@ mono_class_setup_fields (MonoClass *class)
                blittable = FALSE;
 
        /* Prevent infinite loops if the class references itself */
-       class->size_inited = 1;
+       class->setup_fields_called = 1;
 
        if (class->generic_container) {
                container = class->generic_container;
@@ -1911,6 +1911,7 @@ mono_class_layout_fields (MonoClass *class)
                        class->min_align = MAX (class->min_align, class->instance_size - sizeof (MonoObject));
        }
 
+       mono_memory_barrier ();
        class->size_inited = 1;
 
        /*
@@ -2807,9 +2808,11 @@ get_implicit_generic_array_interfaces (MonoClass *class, int *num, int *is_enume
        static MonoClass* generic_icollection_class = NULL;
        static MonoClass* generic_ienumerable_class = NULL;
        static MonoClass* generic_ienumerator_class = NULL;
+       static MonoClass* generic_ireadonlylist_class = NULL;
+       static MonoClass* generic_ireadonlycollection_class = NULL;
        MonoClass *valuetype_types[2] = { NULL, NULL };
        MonoClass **interfaces = NULL;
-       int i, interface_count, real_count, original_rank;
+       int i, nifaces, interface_count, real_count, original_rank;
        int all_interfaces;
        gboolean internal_enumerator;
        gboolean eclass_is_valuetype;
@@ -2851,6 +2854,10 @@ get_implicit_generic_array_interfaces (MonoClass *class, int *num, int *is_enume
                        "System.Collections.Generic", "IEnumerable`1");
                generic_ienumerator_class = mono_class_from_name (mono_defaults.corlib,
                        "System.Collections.Generic", "IEnumerator`1");
+               generic_ireadonlylist_class = mono_class_from_name (mono_defaults.corlib,
+                       "System.Collections.Generic", "IReadOnlyList`1");
+               generic_ireadonlycollection_class = mono_class_from_name (mono_defaults.corlib,
+                       "System.Collections.Generic", "IReadOnlyCollection`1");
        }
 
        mono_class_init (eclass);
@@ -2858,15 +2865,17 @@ get_implicit_generic_array_interfaces (MonoClass *class, int *num, int *is_enume
        /*
         * Arrays in 2.0 need to implement a number of generic interfaces
         * (IList`1, ICollection`1, IEnumerable`1 for a number of types depending
-        * on the element class). We collect the types needed to build the
-        * instantiations in interfaces at intervals of 3, because 3 are
+        * on the element class). For net 4.5, we also need to implement IReadOnlyList`1/IReadOnlyCollection`1.
+        * We collect the types needed to build the
+        * instantiations in interfaces at intervals of 3/5, because 3/5 are
         * the generic interfaces needed to implement.
         */
+       nifaces = generic_ireadonlylist_class ? 5 : 3;
        if (eclass->valuetype) {
                fill_valuetype_array_derived_types (valuetype_types, eclass, original_rank);
 
-               /* IList, ICollection, IEnumerable */
-               real_count = interface_count = valuetype_types [1] ? 6 : 3;
+               /* IList, ICollection, IEnumerable, IReadOnlyList`1 */
+               real_count = interface_count = valuetype_types [1] ? (nifaces * 2) : nifaces;
                if (internal_enumerator) {
                        ++real_count;
                        if (valuetype_types [1])
@@ -2876,7 +2885,7 @@ get_implicit_generic_array_interfaces (MonoClass *class, int *num, int *is_enume
                interfaces = g_malloc0 (sizeof (MonoClass*) * real_count);
                interfaces [0] = valuetype_types [0];
                if (valuetype_types [1])
-                       interfaces [3] = valuetype_types [1];
+                       interfaces [nifaces] = valuetype_types [1];
 
                eclass_is_valuetype = TRUE;
        } else {
@@ -2904,8 +2913,8 @@ get_implicit_generic_array_interfaces (MonoClass *class, int *num, int *is_enume
                        if (valuetype_types [1])
                                ++interface_count;
                }
-               /* IList, ICollection, IEnumerable */
-               interface_count *= 3;
+               /* IList, ICollection, IEnumerable, IReadOnlyList */
+               interface_count *= nifaces;
                real_count = interface_count;
                if (internal_enumerator) {
                        real_count += (MONO_CLASS_IS_INTERFACE (eclass) ? 1 : idepth) + eclass->interface_offsets_count;
@@ -2915,39 +2924,43 @@ get_implicit_generic_array_interfaces (MonoClass *class, int *num, int *is_enume
                interfaces = g_malloc0 (sizeof (MonoClass*) * real_count);
                if (MONO_CLASS_IS_INTERFACE (eclass)) {
                        interfaces [0] = mono_defaults.object_class;
-                       j = 3;
+                       j = nifaces;
                } else {
                        j = 0;
                        for (i = 0; i < idepth; i++) {
                                mono_class_init (eclass->supertypes [i]);
                                interfaces [j] = eclass->supertypes [i];
-                               j += 3;
+                               j += nifaces;
                        }
                }
                if (all_interfaces) {
                        for (i = 0; i < eclass->interface_offsets_count; i++) {
                                interfaces [j] = eclass->interfaces_packed [i];
-                               j += 3;
+                               j += nifaces;
                        }
                } else {
                        for (i = 0; i < eclass->interface_count; i++) {
                                interfaces [j] = eclass->interfaces [i];
-                               j += 3;
+                               j += nifaces;
                        }
                }
                if (valuetype_types [1]) {
                        interfaces [j] = array_class_get_if_rank (valuetype_types [1], original_rank);
-                       j += 3;
+                       j += nifaces;
                }
        }
 
        /* instantiate the generic interfaces */
-       for (i = 0; i < interface_count; i += 3) {
+       for (i = 0; i < interface_count; i += nifaces) {
                MonoClass *iface = interfaces [i];
 
                interfaces [i + 0] = inflate_class_one_arg (mono_defaults.generic_ilist_class, iface);
                interfaces [i + 1] = inflate_class_one_arg (generic_icollection_class, iface);
                interfaces [i + 2] = inflate_class_one_arg (generic_ienumerable_class, iface);
+               if (generic_ireadonlylist_class) {
+                       interfaces [i + 3] = inflate_class_one_arg (generic_ireadonlylist_class, iface);
+                       interfaces [i + 4] = inflate_class_one_arg (generic_ireadonlycollection_class, iface);
+               }
        }
        if (internal_enumerator) {
                int j;
@@ -3339,14 +3352,19 @@ setup_interface_offsets (MonoClass *class, int cur_slot, gboolean overwrite)
                                /*g_print ("type %s has %s offset at %d (%s)\n", class->name, ic->name, interface_offsets_full [ic->interface_id], class->interfaces [0]->name);*/
                        }
                } else {
-                       int ilist_offset, icollection_offset, ienumerable_offset;
+                       int ilist_offset, icollection_offset, ienumerable_offset, ireadonlylist_offset, ireadonlycollection_offset;
                        int ilist_iface_idx = find_array_interface (class, "IList`1");
                        MonoClass* ilist_class = class->interfaces [ilist_iface_idx];
+                       int ireadonlylist_iface_idx = find_array_interface (class, "IReadOnlyList`1");
+                       MonoClass* ireadonlylist_class = ireadonlylist_iface_idx != -1 ? class->interfaces [ireadonlylist_iface_idx] : NULL;
                        int icollection_iface_idx = find_array_interface (ilist_class, "ICollection`1");
                        int ienumerable_iface_idx = find_array_interface (ilist_class, "IEnumerable`1");
+                       int ireadonlycollection_iface_idx = ireadonlylist_iface_idx != -1 ? find_array_interface (ireadonlylist_class, "IReadOnlyCollection`1") : -1;
                        ilist_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, class->interfaces [ilist_iface_idx]);
                        icollection_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, ilist_class->interfaces [icollection_iface_idx]);
                        ienumerable_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, ilist_class->interfaces [ienumerable_iface_idx]);
+                       ireadonlylist_offset = ireadonlylist_iface_idx != -1 ? find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, class->interfaces [ireadonlylist_iface_idx]) : -1;
+                       ireadonlycollection_offset = ireadonlycollection_iface_idx != -1 ? find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, ireadonlylist_class->interfaces [ireadonlycollection_iface_idx]) : -1;
                        g_assert (ilist_offset >= 0 && icollection_offset >= 0 && ienumerable_offset >= 0);
                        for (i = 0; i < num_array_interfaces; ++i) {
                                int offset;
@@ -3357,6 +3375,10 @@ setup_interface_offsets (MonoClass *class, int cur_slot, gboolean overwrite)
                                        offset = icollection_offset;
                                else if (strcmp (ic->name, "IEnumerable`1") == 0)
                                        offset = ienumerable_offset;
+                               else if (strcmp (ic->name, "IReadOnlyList`1") == 0)
+                                       offset = ireadonlylist_offset;
+                               else if (strcmp (ic->name, "IReadOnlyCollection`1") == 0)
+                                       offset = ireadonlycollection_offset;
                                else
                                        g_assert_not_reached ();
                                set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, offset, TRUE);
@@ -3765,7 +3787,7 @@ check_interface_method_override (MonoClass *class, MonoMethod *im, MonoMethod *c
                        TRACE_INTERFACE_VTABLE (printf ("[INTERFACE NAMESPACE CHECK FAILED]"));
                        return FALSE;
                }
-               if ((ic_name == NULL) || ((strcmp (ic_name, "IEnumerable`1") != 0) && (strcmp (ic_name, "ICollection`1") != 0) && (strcmp (ic_name, "IList`1") != 0))) {
+               if ((ic_name == NULL) || ((strcmp (ic_name, "IEnumerable`1") != 0) && (strcmp (ic_name, "ICollection`1") != 0) && (strcmp (ic_name, "IList`1") != 0) && (strcmp (ic_name, "IReadOnlyList`1") != 0) && (strcmp (ic_name, "IReadOnlyCollection`1") != 0))) {
                        TRACE_INTERFACE_VTABLE (printf ("[INTERFACE NAME CHECK FAILED]"));
                        return FALSE;
                }
@@ -4676,6 +4698,9 @@ generic_array_methods (MonoClass *class)
                const char *mname, *iname;
                gchar *name;
                MonoMethod *m = tmp->data;
+               const char *ireadonlylist_prefix = "InternalArray__IReadOnlyList_";
+               const char *ireadonlycollection_prefix = "InternalArray__IReadOnlyCollection_";
+
                generic_array_method_info [i].array_method = m;
                if (!strncmp (m->name, "InternalArray__ICollection_", 27)) {
                        iname = "System.Collections.Generic.ICollection`1.";
@@ -4683,6 +4708,12 @@ generic_array_methods (MonoClass *class)
                } else if (!strncmp (m->name, "InternalArray__IEnumerable_", 27)) {
                        iname = "System.Collections.Generic.IEnumerable`1.";
                        mname = m->name + 27;
+               } else if (!strncmp (m->name, ireadonlylist_prefix, strlen (ireadonlylist_prefix))) {
+                       iname = "System.Collections.Generic.IReadOnlyList`1.";
+                       mname = m->name + strlen (ireadonlylist_prefix);
+               } else if (!strncmp (m->name, ireadonlycollection_prefix, strlen (ireadonlycollection_prefix))) {
+                       iname = "System.Collections.Generic.IReadOnlyCollection`1.";
+                       mname = m->name + strlen (ireadonlycollection_prefix);
                } else if (!strncmp (m->name, "InternalArray__", 15)) {
                        iname = "System.Collections.Generic.IList`1.";
                        mname = m->name + 15;
@@ -5767,6 +5798,7 @@ mono_generic_class_get_class (MonoGenericClass *gclass)
                         */
                        klass->instance_size = gklass->instance_size;
                        klass->sizes.class_size = gklass->sizes.class_size;
+                       mono_memory_barrier ();
                        klass->size_inited = 1;
                }
        }
@@ -5859,6 +5891,7 @@ make_generic_param_class (MonoGenericParam *param, MonoImage *image, gboolean is
        /*Init these fields to sane values*/
        klass->min_align = 1;
        klass->instance_size = sizeof (gpointer);
+       mono_memory_barrier ();
        klass->size_inited = 1;
 
        mono_class_setup_supertypes (klass);
@@ -9797,16 +9830,19 @@ mono_class_setup_interfaces (MonoClass *klass, MonoError *error)
                return;
        }
 
-       if (klass->rank == 1 && klass->byval_arg.type != MONO_TYPE_ARRAY && mono_defaults.generic_ilist_class) {
+       if (klass->rank == 1 && klass->byval_arg.type != MONO_TYPE_ARRAY) {
                MonoType *args [1];
 
                /* generic IList, ICollection, IEnumerable */
-               klass->interface_count = 1;
+               klass->interface_count = mono_defaults.generic_ireadonlylist_class ? 2 : 1;
                klass->interfaces = mono_image_alloc0 (klass->image, sizeof (MonoClass*) * klass->interface_count);
 
                args [0] = &klass->element_class->byval_arg;
                klass->interfaces [0] = mono_class_bind_generic_parameters (
                        mono_defaults.generic_ilist_class, 1, args, FALSE);
+               if (klass->interface_count > 1)
+                       klass->interfaces [1] = mono_class_bind_generic_parameters (
+                          mono_defaults.generic_ireadonlylist_class, 1, args, FALSE);
        } else if (klass->generic_class) {
                MonoClass *gklass = klass->generic_class->container_class;
 
@@ -9886,8 +9922,13 @@ mono_field_resolve_type (MonoClassField *field, MonoError *error)
                g_assert (*sig == 0x06);
                field->type = mono_metadata_parse_type_full (image, container, MONO_PARSE_FIELD, cols [MONO_FIELD_FLAGS], sig + 1, &sig);
                if (!field->type) {
+                       MonoLoaderError *lerror = mono_loader_get_last_error ();
+
                        mono_error_set_type_load_class (error, class, "Could not load field %s type", field->name);
-                       mono_class_set_failure (class, MONO_EXCEPTION_TYPE_LOAD, NULL);
+                       if (lerror)
+                               set_failure_from_loader_error (class, lerror);
+                       else
+                               mono_class_set_failure (class, MONO_EXCEPTION_TYPE_LOAD, NULL);
                        mono_loader_clear_error ();
                }
        }
index 79f67061db8b16a2afd82ea1eb7166eb22b14fe4..59910b6b88f436301e4b5dec6f0599437a9048fc 100644 (file)
@@ -1620,15 +1620,13 @@ mono_init_internal (const char *filename, const char *exe_filename, const char *
        mono_defaults.idispatch_class = NULL;
 #endif
 
-       /*
-        * Note that mono_defaults.generic_*_class is only non-NULL if we're
-        * using the 2.0 corlib.
-        */
        mono_class_init (mono_defaults.array_class);
        mono_defaults.generic_nullable_class = mono_class_from_name (
                mono_defaults.corlib, "System", "Nullable`1");
        mono_defaults.generic_ilist_class = mono_class_from_name (
                mono_defaults.corlib, "System.Collections.Generic", "IList`1");
+       mono_defaults.generic_ireadonlylist_class = mono_class_from_name (
+               mono_defaults.corlib, "System.Collections.Generic", "IReadOnlyList`1");
 
        domain->friendly_name = g_path_get_basename (filename);
 
index 259c5f2f54877a74b399e8414c7ae0c513761240..60d44d2d90419531a2726afe19ce0545d5ce2ceb 100644 (file)
@@ -2428,9 +2428,8 @@ mono_method_signature_checked (MonoMethod *m, MonoError *error)
 
                signature = mono_metadata_parse_method_signature_full (img, container, idx, sig_body, NULL);
                if (!signature) {
-                       mono_loader_clear_error ();
+                       mono_error_set_from_loader_error (error);
                        mono_loader_unlock ();
-                       mono_error_set_method_load (error, m->klass, m->name, "");
                        return NULL;
                }
 
index 00c205ca7836cd9ce72d490a3f16e06edad15e33..f615acd477565d8c09b6fc5792f00f2d10849b28 100644 (file)
@@ -568,7 +568,7 @@ LOOP_HEAD:
                                                copy_func ((void**)elem, queue);
                                                new = *(gpointer*)elem;
                                                if (G_UNLIKELY (sgen_ptr_in_nursery (new)))
-                                                       sgen_add_to_global_remset (elem);
+                                                       sgen_add_to_global_remset (elem, new);
                                        }
                                }
                        }
index cdcc89d5e88cea93f9f4bd59cf722404778d7461..428cc7e1d4d7395d426ef1dff4f55eda75ec2bf0 100644 (file)
@@ -1138,12 +1138,11 @@ mono_gc_clear_domain (MonoDomain * domain)
  * lock must be held.  For serial collectors that is not necessary.
  */
 void
-sgen_add_to_global_remset (gpointer ptr)
+sgen_add_to_global_remset (gpointer ptr, gpointer obj)
 {
        remset.record_pointer (ptr);
 
        if (G_UNLIKELY (MONO_GC_GLOBAL_REMSET_ADD_ENABLED ())) {
-               void *obj = *(void**)ptr;
                MonoVTable *vt = (MonoVTable*)LOAD_VTABLE (obj);
                MONO_GC_GLOBAL_REMSET_ADD ((mword)ptr, (mword)obj, sgen_safe_object_get_size (obj),
                                vt->klass->name_space, vt->klass->name);
@@ -3611,13 +3610,14 @@ clear_unreachable_ephemerons (char *start, char *end, ScanCopyContext ctx)
                        }
 
                        if (was_promoted) {
+                               gpointer value = cur->value;
                                if (ptr_in_nursery (key)) {/*key was not promoted*/
                                        SGEN_LOG (5, "\tAdded remset to key %p", key);
-                                       sgen_add_to_global_remset (&cur->key);
+                                       sgen_add_to_global_remset (&cur->key, key);
                                }
-                               if (ptr_in_nursery (cur->value)) {/*value was not promoted*/
+                               if (ptr_in_nursery (value)) {/*value was not promoted*/
                                        SGEN_LOG (5, "\tAdded remset to value %p", cur->value);
-                                       sgen_add_to_global_remset (&cur->value);
+                                       sgen_add_to_global_remset (&cur->value, value);
                                }
                        }
                }
index e80f6d4854b6020a2eafe470df40ebe13e612aa3..3ce3ea74dac4b9132a79aa8cf2a04c52eef66d40 100644 (file)
@@ -548,7 +548,7 @@ void sgen_pin_stats_register_global_remset (char *obj);
 void sgen_pin_stats_print_class_stats (void);
 
 void sgen_sort_addresses (void **array, int size) MONO_INTERNAL;
-void sgen_add_to_global_remset (gpointer ptr) MONO_INTERNAL;
+void sgen_add_to_global_remset (gpointer ptr, gpointer obj) MONO_INTERNAL;
 
 int sgen_get_current_collection_generation (void) MONO_INTERNAL;
 gboolean sgen_collection_is_parallel (void) MONO_INTERNAL;
index 725c76584fae754c11ac643a36a76f81e5de77f7..97188bcbc4a72676405037eb0854cd401a9dc089 100644 (file)
@@ -43,7 +43,7 @@ extern long long stat_scan_object_called_major;
                        __copy = *(ptr);                                \
                        SGEN_COND_LOG (9, __old != __copy, "Overwrote field at %p with %p (was: %p)", (ptr), *(ptr), __old); \
                        if (G_UNLIKELY (sgen_ptr_in_nursery (__copy) && !sgen_ptr_in_nursery ((ptr)))) \
-                               sgen_add_to_global_remset ((ptr));      \
+                               sgen_add_to_global_remset ((ptr), __copy); \
                }                                                       \
        } while (0)
 
index 5fea758c0b4894eb2c375a4ab1793b114e223d9c..343e74c51dc7cca01d2b673e2559e5b8b63f8460 100644 (file)
@@ -142,7 +142,7 @@ SERIAL_COPY_OBJECT_FROM_OBJ (void **obj_slot, SgenGrayQueue *queue)
                *obj_slot = forwarded;
 #ifndef SGEN_SIMPLE_NURSERY
                if (G_UNLIKELY (sgen_ptr_in_nursery (forwarded) && !sgen_ptr_in_nursery (obj_slot)))
-                       sgen_add_to_global_remset (obj_slot);
+                       sgen_add_to_global_remset (obj_slot, forwarded);
 #endif
                return;
        }
@@ -151,7 +151,7 @@ SERIAL_COPY_OBJECT_FROM_OBJ (void **obj_slot, SgenGrayQueue *queue)
                SGEN_LOG (9, " (pinned, no change)");
                HEAVY_STAT (++stat_nursery_copy_object_failed_pinned);
                if (!sgen_ptr_in_nursery (obj_slot))
-                       sgen_add_to_global_remset (obj_slot);
+                       sgen_add_to_global_remset (obj_slot, obj);
                return;
        }
 
@@ -170,12 +170,12 @@ SERIAL_COPY_OBJECT_FROM_OBJ (void **obj_slot, SgenGrayQueue *queue)
        *obj_slot = copy;
 #ifndef SGEN_SIMPLE_NURSERY
        if (G_UNLIKELY (sgen_ptr_in_nursery (copy) && !sgen_ptr_in_nursery (obj_slot)))
-               sgen_add_to_global_remset (obj_slot);
+               sgen_add_to_global_remset (obj_slot, copy);
 #else
        /* copy_object_no_checks () can return obj on OOM */
        if (G_UNLIKELY (obj == copy)) {
                if (G_UNLIKELY (sgen_ptr_in_nursery (copy) && !sgen_ptr_in_nursery (obj_slot)))
-                       sgen_add_to_global_remset (obj_slot);
+                       sgen_add_to_global_remset (obj_slot, copy);
        }
 #endif
 }
index 47c9be9fa31d806c6ede98976659ae3360827f4a..9efe2ff1868a4ff0a94c9bf90bf655d238c067d1 100644 (file)
@@ -46,7 +46,7 @@ extern long long stat_scan_object_called_nursery;
                        __copy = *(ptr);        \
                        SGEN_COND_LOG (9, __old != __copy, "Overwrote field at %p with %p (was: %p)", (ptr), *(ptr), __old);    \
                        if (G_UNLIKELY (sgen_ptr_in_nursery (__copy) && !sgen_ptr_in_nursery ((ptr)))) \
-                               sgen_add_to_global_remset ((ptr));      \
+                               sgen_add_to_global_remset ((ptr), __copy); \
                }       \
        } while (0)
 
index 0a2a752591e7fe90d8be9b42f20d11c3a11d7426..edda1134020b3178cdf943f19ba3a1817a2ca0ae 100644 (file)
@@ -410,18 +410,20 @@ handle_remset (mword *p, void *start_nursery, void *end_nursery, gboolean global
                //__builtin_prefetch (ptr);
                if (((void*)ptr < start_nursery || (void*)ptr >= end_nursery)) {
                        gpointer old = *ptr;
+                       gpointer copy;
 
                        sgen_get_current_object_ops ()->copy_or_mark_object (ptr, queue);
-                       SGEN_LOG (9, "Overwrote remset at %p with %p", ptr, *ptr);
+                       copy = *ptr;
+                       SGEN_LOG (9, "Overwrote remset at %p with %p", ptr, copy);
                        if (old)
-                               binary_protocol_ptr_update (ptr, old, *ptr, (gpointer)SGEN_LOAD_VTABLE (*ptr), sgen_safe_object_get_size (*ptr));
-                       if (!global && *ptr >= start_nursery && *ptr < end_nursery) {
+                               binary_protocol_ptr_update (ptr, old, copy, (gpointer)SGEN_LOAD_VTABLE (copy), sgen_safe_object_get_size (copy));
+                       if (!global && copy >= start_nursery && copy < end_nursery) {
                                /*
                                 * If the object is pinned, each reference to it from nonpinned objects
                                 * becomes part of the global remset, which can grow very large.
                                 */
-                               SGEN_LOG (9, "Add to global remset because of pinning %p (%p %s)", ptr, *ptr, sgen_safe_name (*ptr));
-                               sgen_add_to_global_remset (ptr);
+                               SGEN_LOG (9, "Add to global remset because of pinning %p (%p %s)", ptr, copy, sgen_safe_name (copy));
+                               sgen_add_to_global_remset (ptr, copy);
                        }
                } else {
                        SGEN_LOG (9, "Skipping remset at %p holding %p", ptr, *ptr);
@@ -435,10 +437,12 @@ handle_remset (mword *p, void *start_nursery, void *end_nursery, gboolean global
                        return p + 2;
                count = p [1];
                while (count-- > 0) {
+                       gpointer copy;
                        copy_func (ptr, queue);
-                       SGEN_LOG (9, "Overwrote remset at %p with %p (count: %d)", ptr, *ptr, (int)count);
-                       if (!global && *ptr >= start_nursery && *ptr < end_nursery)
-                               sgen_add_to_global_remset (ptr);
+                       copy = *ptr;
+                       SGEN_LOG (9, "Overwrote remset at %p with %p (count: %d)", ptr, copy, (int)count);
+                       if (!global && copy >= start_nursery && copy < end_nursery)
+                               sgen_add_to_global_remset (ptr, copy);
                        ++ptr;
                }
                return p + 2;
index 1909ba6e3ee68128fca8e7bbe24aad9d27f3f3b8..31120034b4b0a3a363c58d6fa1c45c26e7882512 100644 (file)
@@ -81,19 +81,19 @@ setlret: src1:i src2:i len:12
 checkthis: src1:b len:4
 call: dest:a clob:c len:20
 call_reg: dest:a src1:i len:8 clob:c
-call_membase: dest:a src1:b len:12 clob:c
+call_membase: dest:a src1:b len:16 clob:c
 voidcall: len:20 clob:c
 voidcall_reg: src1:i len:8 clob:c
-voidcall_membase: src1:b len:12 clob:c
+voidcall_membase: src1:b len:16 clob:c
 fcall: dest:g len:28 clob:c
 fcall_reg: dest:g src1:i len:16 clob:c
-fcall_membase: dest:g src1:b len:20 clob:c
+fcall_membase: dest:g src1:b len:24 clob:c
 lcall: dest:l len:20 clob:c
 lcall_reg: dest:l src1:i len:8 clob:c
-lcall_membase: dest:l src1:b len:12 clob:c
+lcall_membase: dest:l src1:b len:16 clob:c
 vcall: len:20 clob:c
 vcall_reg: src1:i len:8 clob:c
-vcall_membase: src1:b len:12 clob:c
+vcall_membase: src1:b len:16 clob:c
 iconst: dest:i len:16
 r4const: dest:f len:24
 r8const: dest:f len:20
index dc44c7f60d3cfa4e108eb8ff72389f4ad4a21cfd..9c42a1f78c29bfa3f369539a6c0f23b9bd20e546 100644 (file)
@@ -2963,6 +2963,7 @@ find_next_seq_point_for_native_offset (MonoDomain *domain, MonoMethod *method, g
        int i;
 
        seq_points = find_seq_points (domain, method);
+       g_assert (seq_points);
        if (info)
                *info = seq_points;
 
@@ -2985,9 +2986,11 @@ find_prev_seq_point_for_native_offset (MonoDomain *domain, MonoMethod *method, g
        MonoSeqPointInfo *seq_points;
        int i;
 
-       seq_points = find_seq_points (domain, method);
+       seq_points = get_seq_points (domain, method);
        if (info)
                *info = seq_points;
+       if (!seq_points)
+               return NULL;
 
        for (i = seq_points->len - 1; i >= 0; --i) {
                if (seq_points->seq_points [i].native_offset <= native_offset)
@@ -4394,6 +4397,7 @@ process_breakpoint_inner (DebuggerTlsData *tls)
         * the offset recorded in the seq point map, so find the prev seq point before ip.
         */
        sp = find_prev_seq_point_for_native_offset (mono_domain_get (), ji->method, native_offset, &info);
+       g_assert (sp);
 
        DEBUG(1, fprintf (log_file, "[%p] Breakpoint hit, method=%s, ip=%p, offset=0x%x, sp il offset=0x%x.\n", (gpointer)GetCurrentThreadId (), ji->method->name, ip, native_offset, sp ? sp->il_offset : -1));
 
index 41a16914320e2ac40f35dbb54e10780dcdc4d606..5c74f76f9ea14bad25ab01439af57b2f751d3afa 100644 (file)
@@ -1000,4 +1000,17 @@ class Tests {
                return 0;
        }
 
+       public static int test_0_arrays_ireadonly () {
+               int[] arr = new int [10];
+               for (int i = 0; i < 10; ++i)
+                       arr [i] = i;
+               IReadOnlyList<int> a = (IReadOnlyList<int>)(object)arr;
+               if (a.Count != 10)
+                       return 1;
+               if (a [0] != 0)
+                       return 2;
+               if (a [1] != 1)
+                       return 3;
+               return 0;
+       }
 }
index 5d29dd4144c606ff1a176ae9489b3359247a7c18..eec129ed72bef3891702ad8a9147f8391c5fa780 100644 (file)
@@ -4151,13 +4151,24 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_VCALL_MEMBASE:
                case OP_VCALL2_MEMBASE:
                case OP_VOIDCALL_MEMBASE:
-               case OP_CALL_MEMBASE:
-                       g_assert (arm_is_imm12 (ins->inst_offset));
+               case OP_CALL_MEMBASE: {
+                       gboolean imt_arg = FALSE;
+
                        g_assert (ins->sreg1 != ARMREG_LR);
                        call = (MonoCallInst*)ins;
-                       if (call->dynamic_imt_arg || call->method->klass->flags & TYPE_ATTRIBUTE_INTERFACE) {
+                       if (call->dynamic_imt_arg || call->method->klass->flags & TYPE_ATTRIBUTE_INTERFACE)
+                               imt_arg = TRUE;
+                       if (!arm_is_imm12 (ins->inst_offset))
+                               code = mono_arm_emit_load_imm (code, ARMREG_IP, ins->inst_offset);
+                       if (imt_arg)
                                ARM_ADD_REG_IMM8 (code, ARMREG_LR, ARMREG_PC, 4);
+                       else
+                               ARM_MOV_REG_REG (code, ARMREG_LR, ARMREG_PC);
+                       if (!arm_is_imm12 (ins->inst_offset))
+                               ARM_LDR_REG_REG (code, ARMREG_PC, ins->sreg1, ARMREG_IP);
+                       else
                                ARM_LDR_IMM (code, ARMREG_PC, ins->sreg1, ins->inst_offset);
+                       if (imt_arg) {
                                /* 
                                 * We can't embed the method in the code stream in PIC code, or
                                 * in gshared code.
@@ -4170,14 +4181,12 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                else
                                        *((gpointer*)code) = (gpointer)call->method;
                                code += 4;
-                       } else {
-                               ARM_MOV_REG_REG (code, ARMREG_LR, ARMREG_PC);
-                               ARM_LDR_IMM (code, ARMREG_PC, ins->sreg1, ins->inst_offset);
                        }
                        ins->flags |= MONO_INST_GC_CALLSITE;
                        ins->backend.pc_offset = code - cfg->native_code;
                        code = emit_move_return_value (cfg, ins, code);
                        break;
+               }
                case OP_LOCALLOC: {
                        /* keep alignment */
                        int alloca_waste = cfg->param_area;
index 58c0b98da2479de9d324a3e03c141416a5bf32c3..afdb911315a36013562ec58cb4e5400c4b881c04 100644 (file)
@@ -65,6 +65,8 @@
 
 /* the architecture needs a memory fence */
 #if defined(__linux__) && (defined(__i386__) || defined(__x86_64__))
+#include <unistd.h>
+#include <sys/syscall.h>
 #include "perf_event.h"
 #define USE_PERF_EVENTS 1
 static int read_perf_mmap (MonoProfiler* prof);
index 5c09e64746d61929eb704653ba8c9f1faae9975d..0950e96098ed758f7cdb9a86a74414c322eb8f53 100644 (file)
@@ -62,6 +62,9 @@ mono_error_set_not_verifiable (MonoError *oerror, MonoMethod *method, const char
 void
 mono_error_set_generic_error (MonoError *error, const char * name_space, const char *name, const char *msg_format, ...) MONO_INTERNAL;
 
+void
+mono_error_set_from_loader_error (MonoError *error) MONO_INTERNAL;
+
 MonoException*
 mono_error_prepare_exception (MonoError *error, MonoError *error_out) MONO_INTERNAL;
 
index ed080b959ca411c9fc64c94f1e6fc3b1c3d6198f..d489475f7ec1bde58ca1035a030cb3530d286cd3 100644 (file)
@@ -12,6 +12,7 @@
 
 #include <mono/metadata/exception.h>
 #include <mono/metadata/object-internals.h>
+#include <mono/metadata/class-internals.h>
 #include <mono/metadata/debug-helpers.h>
 
 #define mono_internal_error_get_message(E) ((E)->full_message ? (E)->full_message : (E)->message)
@@ -267,6 +268,89 @@ mono_error_set_generic_error (MonoError *oerror, const char * name_space, const
        set_error_message ();
 }
 
+void
+mono_error_set_from_loader_error (MonoError *oerror)
+{
+       MonoLoaderError *loader_error = mono_loader_get_last_error ();
+       MonoErrorInternal *error = (MonoErrorInternal*)oerror;
+
+       mono_error_prepare (error);
+
+
+       if (!loader_error) {
+               mono_error_set_generic_error (oerror, "System", "ExecutionEngineException", "Runtime tried to produce a mono-error from an empty loader-error");
+               return;
+       }
+
+       switch (loader_error->exception_type) {
+       case MONO_EXCEPTION_NONE:
+               mono_error_set_generic_error (oerror, "System", "ExecutionEngineException", "Runtime tried to produce a mono-error from a non-error loader-error");
+               break;
+       case MONO_EXCEPTION_SECURITY_LINKDEMAND:
+       case MONO_EXCEPTION_SECURITY_INHERITANCEDEMAND:
+               mono_error_set_generic_error (oerror, "System.Security", "SecurityException", "Failed for unknown reasons.");
+               break;
+
+       case MONO_EXCEPTION_INVALID_PROGRAM:
+               mono_error_set_generic_error (oerror, "System", "InvalidProgramException", "Failed for unknown reasons.");
+               break;
+
+       case MONO_EXCEPTION_UNVERIFIABLE_IL:
+               mono_error_set_generic_error (oerror, "System.Security", "VerificationException", "Failed for unknown reasons.");
+               break;
+
+       case MONO_EXCEPTION_MISSING_METHOD:
+               error->error_code = MONO_ERROR_MISSING_METHOD;
+               mono_error_set_type_name (oerror, loader_error->class_name);
+               mono_error_set_member_name (oerror, loader_error->member_name);
+               g_snprintf (error->message, sizeof (error->message), "Failed for unknown reasons.");
+               break;
+
+       case MONO_EXCEPTION_MISSING_FIELD:
+               mono_error_set_field_load (oerror, loader_error->klass, loader_error->member_name, "Failed for unknown reasons.");
+               break;
+
+       case MONO_EXCEPTION_TYPE_LOAD:
+               mono_error_set_type_load_name (oerror, loader_error->class_name, loader_error->assembly_name, "Failed for unknown reasons.");
+               break;
+       
+       case MONO_EXCEPTION_FILE_NOT_FOUND:
+               if (loader_error->ref_only)
+                       mono_error_set_assembly_load (oerror, loader_error->assembly_name, "Cannot resolve dependency to assembly because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.");
+               else
+                       mono_error_set_assembly_load (oerror, loader_error->assembly_name, "Could not load file or assembly or one of its dependencies.");
+               break;
+
+       case MONO_EXCEPTION_METHOD_ACCESS:
+               mono_error_set_generic_error (oerror, "System", "MethodAccessException", "Failed for unknown reasons.");
+               break;
+
+       case MONO_EXCEPTION_FIELD_ACCESS:
+               mono_error_set_generic_error (oerror, "System", "FieldAccessException", "Failed for unknown reasons.");
+               break;
+
+       case MONO_EXCEPTION_OBJECT_SUPPLIED:
+       case MONO_EXCEPTION_GENERIC_SHARING_FAILED:
+               mono_error_set_generic_error (oerror, "System", "ExecutionEngineException", "Runtime tried to produce a mono-error from JIT internal error %d", loader_error->exception_type);
+               break;
+
+       case MONO_EXCEPTION_BAD_IMAGE:
+               mono_error_set_bad_image_name (oerror, "<unknown>", "%s", loader_error->msg);
+               break;
+
+       case MONO_EXCEPTION_OUT_OF_MEMORY:
+               mono_error_set_out_of_memory (oerror, "Failed for unknown reasons.");
+               break;
+
+       default:
+               mono_error_set_generic_error (oerror, "System", "ExecutionEngineException", "Runtime tried to produce an unknown loader-error %d", loader_error->exception_type);
+               break;
+       }
+
+       mono_error_dup_strings (oerror, TRUE);
+       mono_loader_clear_error ();
+}
+
 void
 mono_error_set_out_of_memory (MonoError *oerror, const char *msg_format, ...)
 {
index c12d4a7c89693a6b8db58d063240845399b9df1c..f70d4d20241c5d8c50d52fbd903dc744ba69902f 100644 (file)
@@ -1,6 +1,3 @@
-# hack to prevent 'check' from depending on 'all'
-AUTOMAKE_OPTIONS = cygnus
-
 tmpinst = _tmpinst
 
 noinst_SCRIPTS = mono-wrapper monodis-wrapper