X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FSystem.Security.Cryptography%2FDSA.cs;h=73abc4d4c4f5fbe6f00ca6862487e4cce8612ba7;hb=01ea58cbd474d4a9230acbba5571738896539d42;hp=e41fa90a03b4fea21c63e6ca0ebb3a83a6cbe0c7;hpb=0002a9258ca79eb502153a4c1205027405e3d7b3;p=mono.git diff --git a/mcs/class/corlib/System.Security.Cryptography/DSA.cs b/mcs/class/corlib/System.Security.Cryptography/DSA.cs old mode 100755 new mode 100644 index e41fa90a03b..73abc4d4c4f --- a/mcs/class/corlib/System.Security.Cryptography/DSA.cs +++ b/mcs/class/corlib/System.Security.Cryptography/DSA.cs @@ -6,7 +6,7 @@ // Sebastien Pouliot (sebastien@ximian.com) // // Portions (C) 2002, 2003 Motus Technologies Inc. (http://www.motus.com) -// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com) +// Copyright (C) 2004-2005, 2008 Novell, Inc (http://www.novell.com) // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the @@ -28,8 +28,8 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -using System; using System.Globalization; +using System.Runtime.InteropServices; using System.Text; using Mono.Xml; @@ -41,23 +41,21 @@ using Mono.Security; namespace System.Security.Cryptography { - public abstract class DSA : AsymmetricAlgorithm { + [ComVisible (true)] + public abstract class DSA : AsymmetricAlgorithm { -#if NET_2_0 // Constructor visibility fixed in Fx 2.0 protected DSA () -#else - // LAMESPEC: It says to derive new DSA implemenation from DSA class. - // Well it's aint gonna be easy this way. - // RSA constructor is public - internal DSA () -#endif { } public static new DSA Create () { +#if FULL_AOT_RUNTIME + return new System.Security.Cryptography.DSACryptoServiceProvider (); +#else return Create ("System.Security.Cryptography.DSA"); +#endif } public static new DSA Create (string algName) @@ -75,14 +73,6 @@ namespace System.Security.Cryptography { Array.Clear (parameters.X, 0, parameters.X.Length); } - private byte[] GetNamedParam (SecurityElement se, string param) - { - SecurityElement sep = se.SearchForChildByTag (param); - if (sep == null) - return null; - return Convert.FromBase64String (sep.Text); - } - public override void FromXmlString (string xmlString) { if (xmlString == null) @@ -90,19 +80,14 @@ namespace System.Security.Cryptography { DSAParameters dsaParams = new DSAParameters (); try { - SecurityParser sp = new SecurityParser (); - sp.LoadXml (xmlString); - SecurityElement se = sp.ToXml (); - if (se.Tag != "DSAKeyValue") - throw new Exception (); - dsaParams.P = GetNamedParam (se, "P"); - dsaParams.Q = GetNamedParam (se, "Q"); - dsaParams.G = GetNamedParam (se, "G"); - dsaParams.J = GetNamedParam (se, "J"); - dsaParams.Y = GetNamedParam (se, "Y"); - dsaParams.X = GetNamedParam (se, "X"); - dsaParams.Seed = GetNamedParam (se, "Seed"); - byte[] counter = GetNamedParam (se, "PgenCounter"); + dsaParams.P = GetNamedParam (xmlString, "P"); + dsaParams.Q = GetNamedParam (xmlString, "Q"); + dsaParams.G = GetNamedParam (xmlString, "G"); + dsaParams.J = GetNamedParam (xmlString, "J"); + dsaParams.Y = GetNamedParam (xmlString, "Y"); + dsaParams.X = GetNamedParam (xmlString, "X"); + dsaParams.Seed = GetNamedParam (xmlString, "Seed"); + byte[] counter = GetNamedParam (xmlString, "PgenCounter"); if (counter != null) { byte[] counter4b = new byte [4]; // always 4 bytes Buffer.BlockCopy (counter, 0, counter4b, 0, counter.Length); @@ -145,9 +130,13 @@ namespace System.Security.Cryptography { sb.Append (Convert.ToBase64String (dsaParams.Y)); sb.Append( ""); - sb.Append (""); - sb.Append (Convert.ToBase64String (dsaParams.J)); - sb.Append (""); + if (dsaParams.J != null) { + // if J wasn't imported then it's not exported and neither + // is part of the XML output + sb.Append (""); + sb.Append (Convert.ToBase64String (dsaParams.J)); + sb.Append (""); + } if (dsaParams.Seed != null) { sb.Append (""); @@ -156,14 +145,13 @@ namespace System.Security.Cryptography { sb.Append (""); // the number of bytes is important (no matter == 0x00) - byte[] inArr = BitConverterLE.GetBytes (dsaParams.Counter); - int l = inArr.Length; - while (inArr[l-1] == 0x00) - l--; - if (l > 0) { - byte[] c = new byte [l]; - Buffer.BlockCopy (inArr, 0, c, 0, l); - sb.Append (Convert.ToBase64String (c)); + if (dsaParams.Counter != 0) { + byte[] inArr = BitConverterLE.GetBytes (dsaParams.Counter); + int l = inArr.Length; + while (inArr[l-1] == 0x00) + l--; + + sb.Append (Convert.ToBase64String (inArr, 0, l)); } else { sb.Append ("AA=="); // base64 encoded 0 } @@ -176,8 +164,7 @@ namespace System.Security.Cryptography { sb.Append (""); } else if (includePrivateParameters) { - throw new CryptographicException ( - Locale.GetText ("Missing private key informations")); + throw new ArgumentNullException ("X"); } sb.Append ("");