The Labs \ Source Viewer \ SSCLI \ System.Security.Permissions \ StrongNamePublicKeyBlob

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. // StrongNamePublicKeyBlob.cs
  16. //
  17. namespace System.Security.Permissions
  18. {
  19.     using System;
  20.     using SecurityElement = System.Security.SecurityElement;
  21.     using System.Security.Util;
  22.    
  23.     [System.Runtime.InteropServices.ComVisible(true)]
  24.     [Serializable()]
  25.     public sealed class StrongNamePublicKeyBlob
  26.     {
  27.         internal byte[] PublicKey;
  28.        
  29.         internal StrongNamePublicKeyBlob()
  30.         {
  31.         }
  32.        
  33.         public StrongNamePublicKeyBlob(byte[] publicKey)
  34.         {
  35.             if (publicKey == null)
  36.                 throw new ArgumentNullException("PublicKey");
  37.            
  38.             this.PublicKey = new byte[publicKey.Length];
  39.             Array.Copy(publicKey, 0, this.PublicKey, 0, publicKey.Length);
  40.         }
  41.        
  42.         internal StrongNamePublicKeyBlob(string publicKey)
  43.         {
  44.             this.PublicKey = Hex.DecodeHexString(publicKey);
  45.         }
  46.        
  47.         private static bool CompareArrays(byte[] first, byte[] second)
  48.         {
  49.             if (first.Length != second.Length) {
  50.                 return false;
  51.             }
  52.            
  53.             int count = first.Length;
  54.             for (int i = 0; i < count; ++i) {
  55.                 if (first[i] != second[i])
  56.                     return false;
  57.             }
  58.            
  59.             return true;
  60.         }
  61.        
  62.        
  63.         internal bool Equals(StrongNamePublicKeyBlob blob)
  64.         {
  65.             if (blob == null)
  66.                 return false;
  67.             else
  68.                 return CompareArrays(this.PublicKey, blob.PublicKey);
  69.         }
  70.        
  71.         public override bool Equals(object obj)
  72.         {
  73.             if (obj == null || !(obj is StrongNamePublicKeyBlob))
  74.                 return false;
  75.            
  76.             return this.Equals((StrongNamePublicKeyBlob)obj);
  77.         }
  78.        
  79.         private static int GetByteArrayHashCode(byte[] baData)
  80.         {
  81.             if (baData == null)
  82.                 return 0;
  83.            
  84.             int accumulator = 0;
  85.            
  86.             for (int i = 0; i < baData.Length; ++i) {
  87.                 accumulator = (accumulator << 8) ^ (int)baData[i] ^ (accumulator >> 24);
  88.             }
  89.            
  90.             return accumulator;
  91.         }
  92.        
  93.         public override int GetHashCode()
  94.         {
  95.             return GetByteArrayHashCode(PublicKey);
  96.         }
  97.        
  98.         public override string ToString()
  99.         {
  100.             return Hex.EncodeHexString(PublicKey);
  101.         }
  102.     }
  103. }

Developer Fusion