* DSACryptoServiceProvider.cs: Fixed support for key pair persistence.
It now requires (like MS) to call Clear to delete an existing
container. PersistKeyInCsp default value also changes if a
CspParameters is supplied (or not) to the constructor.
* RSACryptoServiceProvider.cs: Same fixes as DSA.
svn path=/trunk/mcs/; revision=22899
+2004-02-09 Sebastien Pouliot <sebastien@ximian.com>
+
+ * DSACryptoServiceProvider.cs: Fixed support for key pair persistence.
+ It now requires (like MS) to call Clear to delete an existing
+ container. PersistKeyInCsp default value also changes if a
+ CspParameters is supplied (or not) to the constructor.
+ * RSACryptoServiceProvider.cs: Same fixes as DSA.
+
2004-02-08 Sebastien Pouliot <sebastien@ximian.com>
* HashAlgorithm.cs: Changed the ComputeHash(Stream) method to (a) not
#else
public sealed class DSACryptoServiceProvider : DSA {
#endif
- private const int PROV_DSS = 2; // from WinCrypt.h
+ private const int PROV_DSS = 3; // from WinCrypt.h
private KeyPairPersistence store;
- private bool persistKey = true;
+ private bool persistKey;
private bool persisted;
private bool privateKeyExportable = true;
public DSACryptoServiceProvider (int dwKeySize, CspParameters parameters)
{
+ LegalKeySizesValue = new KeySizes [1];
+ LegalKeySizesValue [0] = new KeySizes (512, 1024, 64);
+
+ // will throw an exception is key size isn't supported
+ KeySize = dwKeySize;
+ dsa = new DSAManaged (dwKeySize);
+ dsa.KeyGenerated += new DSAManaged.KeyGeneratedEventHandler (OnKeyGenerated);
+
+ persistKey = (parameters != null);
if (parameters == null) {
parameters = new CspParameters (PROV_DSS);
#if ! NET_1_0
this.FromXmlString (store.KeyValue);
}
}
-
- LegalKeySizesValue = new KeySizes [1];
- LegalKeySizesValue [0] = new KeySizes (512, 1024, 64);
-
- // will throw an exception is key size isn't supported
- KeySize = dwKeySize;
- dsa = new DSAManaged (dwKeySize);
- dsa.KeyGenerated += new DSAManaged.KeyGeneratedEventHandler (OnKeyGenerated);
}
~DSACryptoServiceProvider ()
public bool PersistKeyInCsp {
get { return persistKey; }
set {
- if (value) {
- OnKeyGenerated (dsa);
- }
- else {
- // delete the container
- store.Remove ();
- }
persistKey = value;
+ if (persistKey)
+ OnKeyGenerated (dsa);
}
}
protected override void Dispose (bool disposing)
{
if (!m_disposed) {
+ // the key is persisted and we do not want it persisted
+ if ((persisted) && (!persistKey)) {
+ store.Remove (); // delete the container
+ }
if (dsa != null)
dsa.Clear ();
// call base class
private void OnKeyGenerated (object sender)
{
+ // the key isn't persisted and we want it persisted
if ((persistKey) && (!persisted)) {
// save the current keypair
store.KeyValue = this.ToXmlString (!dsa.PublicOnly);
private const int PROV_RSA_FULL = 1; // from WinCrypt.h
private KeyPairPersistence store;
- private bool persistKey = true;
+ private bool persistKey;
private bool persisted;
private bool privateKeyExportable = true;
private void Common (int dwKeySize, CspParameters p)
{
+ // Microsoft RSA CSP can do between 384 and 16384 bits keypair
+ LegalKeySizesValue = new KeySizes [1];
+ LegalKeySizesValue [0] = new KeySizes (384, 16384, 8);
+ base.KeySize = dwKeySize;
+
+ rsa = new RSAManaged (KeySize);
+ rsa.KeyGenerated += new RSAManaged.KeyGeneratedEventHandler (OnKeyGenerated);
+
+ persistKey = (p != null);
if (p == null) {
p = new CspParameters (PROV_RSA_FULL);
#if ! NET_1_0
this.FromXmlString (store.KeyValue);
}
}
-
- // Microsoft RSA CSP can do between 384 and 16384 bits keypair
- LegalKeySizesValue = new KeySizes [1];
- LegalKeySizesValue [0] = new KeySizes (384, 16384, 8);
- base.KeySize = dwKeySize;
-
- rsa = new RSAManaged (KeySize);
- rsa.KeyGenerated += new RSAManaged.KeyGeneratedEventHandler (OnKeyGenerated);
}
#if ! NET_1_0
public bool PersistKeyInCsp {
get { return persistKey; }
set {
- if (value) {
- OnKeyGenerated (rsa);
- }
- else {
- // delete the container
- store.Remove ();
- }
persistKey = value;
+ if (persistKey)
+ OnKeyGenerated (rsa);
}
}
protected override void Dispose (bool disposing)
{
if (!m_disposed) {
+ // the key is persisted and we do not want it persisted
+ if ((persisted) && (!persistKey)) {
+ store.Remove (); // delete the container
+ }
if (rsa != null)
rsa.Clear ();
// call base class
private void OnKeyGenerated (object sender)
{
+ // the key isn't persisted and we want it persisted
if ((persistKey) && (!persisted)) {
// save the current keypair
store.KeyValue = this.ToXmlString (!rsa.PublicOnly);