Hey,

Don't use 'new SHA256Managed', use 'SHA256.Create ()'. This way the
mono runtime will be able to select the 'best' SHA256 implementation
to use. On iOS this could default to the native implementation, on
desktop this will default to SHA256Managed.

Alan

On 10 July 2012 12:28, René Ruppert <[email protected]> wrote:
> Hi,
>
> from the docs of 5.3:
>
> Common Crypto
>
> MonoTouch will now use the iOS CommonCrypto libraries to provide some of the
> functionality exposed by its APIs. This replaces our managed implementations
> with the native versions. It is now used for for digest (hash) and symmetric
> ciphers, leveraging the hardware acceleration for SHA-1 and AES under the
> right circumstances.
>
>
> I'm using code like the one below for hashing and encryption. How can I take
> advantage of HW crypto? Or will it automatically become faster?
>
> /// <summary>
>
> /// Calculates the SHA256 hash value of the data <c>b</c>.
>
> /// </summary>
>
> /// <detail declaration="public static"/>
>
> /// <param name="b" type="byte[]">The data of which the hash value is
> calculated.</param>
>
> /// <returns type="byte[]">The SHA256 hash value of <c>b</c>.</returns>
>
> public static byte[] CalculateHash ( byte[] b )
>
> {
>
> SHA256Managed oSha = new SHA256Managed ();
>
> byte[] aHash = oSha.ComputeHash ( b );
>
> return aHash;
>
> }
>
> /// <summary>
>
> /// Computes SHA256 hash from a string
>
> /// </summary>
>
> /// <param name="sData"></param>
>
> /// <returns></returns>
>
> public static string ComputeSHA256HashUnicode ( string sData )
>
> {
>
> byte[] aData, aHash;
>
>
> UnicodeEncoding oEncoding = new UnicodeEncoding ();
>
> aData = oEncoding.GetBytes ( sData );
>
> aHash = CalculateHash(aData);
>
> string sResult = oEncoding.GetString ( aHash );
>
> return sResult;
>
> }
>
>
>
> public static void Crypt ( Stream oFileIn, Stream oFileOut, ICryptoTransform
> oTrans )
>
> {
>
> // Declare local variables
>
> byte[] buf = new byte[ 4096]; // Read buffer
>
> int iLen; // Current buffer length
>
> long lReadLen = 0; // Total number of bytes written.
>
> long lTotLen = oFileIn.Length; // Total length of the input file.
>
>
> // Move to the beginning of the file
>
> if ( oFileIn.Position > 0 && oFileIn.CanSeek )
>
> oFileIn.Seek ( 0, SeekOrigin.Begin );
>
>
> // Create the cryptographic stream
>
> CryptoStream encStream = new CryptoStream (oFileOut, oTrans,
> CryptoStreamMode.Write);
>
>
> // Read from the input file, then encrypt/decrypt and write to the output
> file.
>
> while ( lReadLen < lTotLen )
>
> {
>
> iLen = oFileIn.Read ( buf, 0, buf.Length );
>
> encStream.Write ( buf, 0, iLen );
>
> lReadLen += iLen;
>
> }
>
> // Clean up
>
> encStream.Close ();
>
> }
>
>
>
> René
>
>
> _______________________________________________
> MonoTouch mailing list
> [email protected]
> http://lists.ximian.com/mailman/listinfo/monotouch
>
_______________________________________________
MonoTouch mailing list
[email protected]
http://lists.ximian.com/mailman/listinfo/monotouch

Reply via email to