public override bool Equals(object other)
        {
            if (this == other)
            {
                return(true);
            }

            X509Certificate that = other as X509Certificate;

            if (null == that)
            {
                return(false);
            }

            if (this.hashValueSet && that.hashValueSet)
            {
                if (this.hashValue != that.hashValue)
                {
                    return(false);
                }
            }
            else if (null == this.cachedEncoding || null == that.cachedEncoding)
            {
                DerBitString signature = c.Signature;
                if (null != signature && !signature.Equals(that.c.Signature))
                {
                    return(false);
                }
            }

            byte[] thisEncoding = this.GetCachedEncoding().Encoding;
            byte[] thatEncoding = that.GetCachedEncoding().Encoding;

            return(null != thisEncoding &&
                   null != thatEncoding &&
                   Arrays.AreEqual(thisEncoding, thatEncoding));
        }