[Mono-dev] RSA and ECDH
Brandon Perry
bperry.volatile at gmail.com
Sun Feb 16 16:01:11 UTC 2014
I wonder, you are instantiating the RSACryptoServiceProvider object
after storing the before ticks, how much of the time is simply
instantiating the object? Maybe move that ahead of before ticks if you
want to measure just the key generation.
Just off-the-cuff thought.
On 02/16/2014 09:51 AM, Edward Ned Harvey (mono) wrote:
> Here are my RSA benchmark results:
>
> Conclusion is that RSA key generation is expensive no matter what, but it's 20x-40x worse on mono.
>
> .NET 4.0, Win 8.1 VM inside a Mac, Debug build, 3 trials average:
> 1024 27 ms
> 2048 80 ms
> 3072 673 ms
>
> .NET 4.0, Win 8.1 VM inside a Mac, Release build, 3 trials average:
> 1024 14 ms
> 2048 94 ms
> 3072 1,273 ms
>
> Mono 3.2.5 on Mac OSX, compiled by VS Debug, 3 trials average:
> 1024 505 ms
> 2048 4,718 ms
> 3072 42,972 ms
>
> Mono 3.2.5 on Mac OSX, compiled by VS Release, 3 trials average:
> 1024 883 ms
> 2048 8,310 ms
> 3072 40,284 ms
>
> Mono 3.2.5 on Mac OSX, compiled by xbuild Debug, 3 trials average:
> 1024 894 ms
> 2048 5,756 ms
> 3072 35,273 ms
>
> Mono 3.2.5 on Mac OSX, compiled by xbuild Release, 3 trials average:
> 1024 1,215 ms
> 2048 12,966 ms
> 3072 18,952 ms
>
> Code to generate these results:
>
> using System;
> using System.Collections.Generic;
> using System.Security.Cryptography;
>
> namespace FunWithRSAKeys
> {
> class Program
> {
> static void Main(string[] args)
> {
> const int numRuns = 3;
> long beforeTicks;
> long afterTicks;
> RSACryptoServiceProvider RSACSP;
> int[] keySizes = { 1024, 2048, 3072 };
> Dictionary<int, double[]> results = new Dictionary<int, double[]>();
> foreach (int keySize in keySizes)
> results[keySize] = new double[numRuns];
>
> for (int i = 0; i < numRuns; i++)
> {
> System.Console.WriteLine("-----------------------------");
> foreach (int keySize in keySizes)
> {
> beforeTicks = DateTime.UtcNow.Ticks;
> RSACSP = new RSACryptoServiceProvider(keySize);
> RSACSP.ExportParameters(false); // Minimum effort to guarantee key will actually be generated
> afterTicks = DateTime.UtcNow.Ticks;
> double seconds = (double)(afterTicks - beforeTicks) / (double)TimeSpan.TicksPerSecond;
> results[keySize][i] = seconds;
> System.Console.WriteLine(keySize.ToString() + " " + seconds.ToString());
> }
> }
> System.Console.WriteLine("----------------------------- Results");
> foreach(int keySize in keySizes)
> {
> System.Console.WriteLine(keySize.ToString() + " " + avg(results[keySize]).ToString());
> }
> System.Console.WriteLine("-----------------------------");
> System.Threading.Thread.Sleep(int.MaxValue);
> }
> static double avg(double[] values)
> {
> double result = 0;
> foreach (double value in values)
> result += value / values.Length;
> return result;
> }
> }
> }
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
More information about the Mono-devel-list
mailing list