2004-05-18 Sebastien Pouliot <sebastien@ximian.com>
authorSebastien Pouliot <sebastien@ximian.com>
Tue, 18 May 2004 13:43:17 +0000 (13:43 -0000)
committerSebastien Pouliot <sebastien@ximian.com>
Tue, 18 May 2004 13:43:17 +0000 (13:43 -0000)
* ASN1Convert.cs: In sync with Mono.Security.dll version.
* StrongName.cs: In sync with Mono.Security.dll version.

svn path=/trunk/mcs/; revision=27587

mcs/class/corlib/Mono.Security/ASN1Convert.cs
mcs/class/corlib/Mono.Security/ChangeLog
mcs/class/corlib/Mono.Security/StrongName.cs

index f8e5269dbfd5f1896bd3be1234414103f14007f0..d7050a2760ccf153fa12ee2e9f9e94b00553ab7b 100644 (file)
@@ -42,47 +42,60 @@ namespace Mono.Security {
                        if (dt.Year < 2050) {
                                // UTCTIME
                                return new ASN1 (0x17, Encoding.ASCII.GetBytes (
-                                       dt.ToString ("yyMMddHHmmss", CultureInfo.InvariantCulture) + "Z"));
+                                       dt.ToUniversalTime ().ToString ("yyMMddHHmmss",
+                                       CultureInfo.InvariantCulture) + "Z"));
                        }
                        else {
                                // GENERALIZEDTIME
                                return new ASN1 (0x18, Encoding.ASCII.GetBytes (
-                                       dt.ToString ("yyyyMMddHHmmss", CultureInfo.InvariantCulture) + "Z"));
+                                       dt.ToUniversalTime ().ToString ("yyyyMMddHHmmss", 
+                                       CultureInfo.InvariantCulture) + "Z"));
                        }
                }
 
                static public ASN1 FromInt32 (Int32 value) 
                {
                        byte[] integer = BitConverterLE.GetBytes (value);
-                       int x = 3;
-                       while (integer [x] == 0x00)
-                               x--;
+                       Array.Reverse (integer);
+                       int x = 0;
+                       while ((x < integer.Length) && (integer [x] == 0x00))
+                               x++;
                        ASN1 asn1 = new ASN1 (0x02);
-
-                       byte[] smallerInt = new byte [x + 1];
-                       int index = smallerInt.Length - 1;
-                       for (int i = 0; i < smallerInt.Length; i++) {
-                               smallerInt [index] = integer [i];
-                               index--;
+                       switch (x) {
+                       case 0:
+                               asn1.Value = integer;
+                               break;
+                       case 4:
+                               asn1.Value = new byte [0];
+                               break;
+                       default:
+                               byte[] smallerInt = new byte [4 - x];
+                               Buffer.BlockCopy (integer, x, smallerInt, 0, smallerInt.Length);
+                               asn1.Value = smallerInt;
+                               break;
                        }
-                       asn1.Value = smallerInt;
-
                        return asn1;
                }
 
                static public ASN1 FromOid (string oid) 
                {
+                       if (oid == null)
+                               throw new ArgumentNullException ("oid");
+
                        return new ASN1 (CryptoConfig.EncodeOID (oid));
                }
 
                static public ASN1 FromUnsignedBigInteger (byte[] big) 
                {
-                       if (big [0] == 0x00) {
-                               // this first byte is added so we're sure it's an unsigned integer
+                       if (big == null)
+                               throw new ArgumentNullException ("big");
+                               
+                       if (big [0] != 0x00) {
+                               // this first byte is added so we're sure this is an unsigned integer
                                // however we can't feed it into RSAParameters or DSAParameters
                                int length = big.Length + 1;
                                byte[] uinteger = new byte [length];
-                               Buffer.BlockCopy (big, 0, uinteger, 1, length);
+                               Buffer.BlockCopy (big, 0, uinteger, 1, length - 1);
                                big = uinteger;
                        }
                        return new ASN1 (0x02, big);
@@ -90,8 +103,11 @@ namespace Mono.Security {
 
                static public int ToInt32 (ASN1 asn1) 
                {
+                       if (asn1 == null)
+                               throw new ArgumentNullException ("asn1");
                        if (asn1.Tag != 0x02)
-                               throw new NotSupportedException ("Only integer can be converted");
+                               throw new FormatException ("Only integer can be converted");
+
                        int x = 0;
                        for (int i=0; i < asn1.Value.Length; i++)
                                x = (x << 8) + asn1.Value [i];
@@ -102,6 +118,9 @@ namespace Mono.Security {
                // an OID (IETF style). Based on DUMPASN1.C from Peter Gutmann.
                static public string ToOid (ASN1 asn1) 
                {
+                       if (asn1 == null)
+                               throw new ArgumentNullException ("asn1");
+
                        byte[] aOID = asn1.Value;
                        StringBuilder sb = new StringBuilder ();
                        // Pick apart the OID
@@ -129,6 +148,9 @@ namespace Mono.Security {
 
                static public DateTime ToDateTime (ASN1 time) 
                {
+                       if (time == null)
+                               throw new ArgumentNullException ("time");
+
                        string t = Encoding.ASCII.GetString (time.Value);
                        // to support both UTCTime and GeneralizedTime (and not so common format)
                        string mask = null;
index 2232b708db67ab1bde297f8388f70ae19ead9011..6e34d99f4cc24eb46a49d5dd215d6bd689c45e1b 100644 (file)
@@ -1,3 +1,8 @@
+2004-05-18  Sebastien Pouliot  <sebastien@ximian.com>
+
+       * ASN1Convert.cs: In sync with Mono.Security.dll version.
+       * StrongName.cs: In sync with Mono.Security.dll version.
+
 2004-05-03  Sebastien Pouliot  <sebastien@ximian.com>
 
        * ASN1.cs: Fixed NullReferenceException in xmldsig standalone tests.
index f6fe1e88e04cf4d90b1a83417a66bbb632905cac..f1ae174209b20760bcb52caccdc4663d53ef61a9 100755 (executable)
@@ -116,7 +116,7 @@ namespace Mono.Security {
                        }
                }
 
-               public StrongName (RSA rsa) : base ()
+               public StrongName (RSA rsa)
                {
                        if (rsa == null)
                                throw new ArgumentNullException ("rsa");
@@ -242,7 +242,7 @@ namespace Mono.Security {
 
                public byte[] GetBytes () 
                {
-                       return CryptoConvert.ToCapiPrivateKeyBlob (rsa);
+                       return CryptoConvert.ToCapiPrivateKeyBlob (RSA);
                }
 
                private UInt32 RVAtoPosition (UInt32 r, int sections, byte[] headers) 
@@ -408,8 +408,9 @@ namespace Mono.Security {
                                sn = StrongHash (fs, StrongNameOptions.Signature);
                                fs.Close ();
                        }
-                       if (sn.Hash == null)
+                       if (sn.Hash == null) {
                                return false;
+                       }
 
                        try {
                                AssemblyHashAlgorithm algorithm = AssemblyHashAlgorithm.SHA1;