[Mono-bugs] [Bug 55445][Wis] Changed - RSACryptoServiceProvider.ExportParameters method takes 35 seconds
bugzilla-daemon@bugzilla.ximian.com
bugzilla-daemon@bugzilla.ximian.com
Wed, 10 Mar 2004 19:51:31 -0500 (EST)
Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.
Changed by spouliot@videotron.ca.
http://bugzilla.ximian.com/show_bug.cgi?id=55445
--- shadow/55445 2004-03-10 18:52:40.000000000 -0500
+++ shadow/55445.tmp.25960 2004-03-10 19:51:31.000000000 -0500
@@ -1,14 +1,14 @@
Bug#: 55445
Product: Mono: Runtime
Version: unspecified
OS: SUSE 9.0
OS Details:
-Status: NEW
-Resolution:
-Severity:
+Status: RESOLVED
+Resolution: NOTABUG
+Severity: Unknown
Priority: Wishlist
Component: misc
AssignedTo: mono-bugs@ximian.com
ReportedBy: jluciani@novell.com
QAContact: mono-bugs@ximian.com
TargetMilestone: ---
@@ -77,6 +77,59 @@
All of the time.
Additional Information:
Running on a build of mono that is about a week old.
+
+------- Additional Comments From spouliot@videotron.ca 2004-03-10 19:51 -------
+BAD NEWS
+This seems (only) a bit long but, I'm sorry to report, normal :-(
+
+Mono use a totally managed implementation for RSA (and DSA, DH ...).
+This has many advantages (http://pages.infinit.net/ctech/20040309-
+1036.html) but also some inconvenient – mostly performance. Creating
+a new key pair is a very CPU heavy process so every processor cycle
+counts. Using a high level language like C# on top of a JIT, even as
+good as Mono, can hardly compare to hand-tuned assembly language
+often found for doing the job (or at least "key" part of the job).
+The result is that it can take much more time to generate similar
+sized key pairs in managed code.
+
+
+"POTENTIAL" GOOD NEWS
+However it may not be "as bad" as it seems in the sample...
+
+Unlike MS implementation Mono doesn't generate a new key pair in its
+constructor (when no CspParameter object is specified as a
+parameter). This is because it's a common (and bad) pattern to
+create a RSACryptoServiceProvider object then immediately import an
+existing public key (or key pair) into it. Sadly I've seen this in
+too many samples on the Internet and this simply kills performance
+on the Windows platform (in particular for server applications).
+
+In order to avoid this pattern Mono doesn’t generate a new key pair
+until it is actually required. This is nice most of the time but
+this also means that, in the case a new key pair is really needed,
+the delay required generating a new key pair moves until later in an
+application process (when the UI may not expect this).
+
+But this also means that calling again a method requiring either the
+public or private key will be much faster because it doesn’t require
+generating (again) a new key pair (see sample). So this is "only" a
+one time hit... Hopefully most implementation do not require
+creating new key pairs very frequently as opposed to
+signing/verifying or encrypting/decrypting.
+
+
+// wow this is really fast !
+RSACryptoServiceProvider rsa = new RSACryptoServiceProvider (16384);
+// hey what’s going on ??? ... for about 24 hours ...
+string keypair = rsa.ToXmlString (true);
+// we seems awake now!
+string backup = rsa.ToXmlString (true);
+
+
+Another good news is that most optimization made to the JIT will
+results in improvement in the key generation performance. So it will
+keep going faster without changing the code ;-)
+