static bool AreTokenParametersMatching(SecurityTokenParameters p1, SecurityTokenParameters p2, bool skipRequireDerivedKeysComparison, bool exactMessageSecurityVersion)
        {
            if (p1 == null || p2 == null)
                return false;

            if (p1.GetType() != p2.GetType())
                return false;

            if (p1.InclusionMode != p2.InclusionMode)
                return false;

            if (skipRequireDerivedKeysComparison == false && p1.RequireDerivedKeys != p2.RequireDerivedKeys)
                return false;

            if (p1.ReferenceStyle != p2.ReferenceStyle)
                return false;

            // mutual ssl and anonymous ssl differ in the client cert requirement
            if (p1 is SslSecurityTokenParameters)
            {
                if (((SslSecurityTokenParameters)p1).RequireClientCertificate != ((SslSecurityTokenParameters)p2).RequireClientCertificate)
                    return false;
            }
            else if (p1 is SecureConversationSecurityTokenParameters)
            {
                SecureConversationSecurityTokenParameters sc1 = (SecureConversationSecurityTokenParameters)p1;
                SecureConversationSecurityTokenParameters sc2 = (SecureConversationSecurityTokenParameters)p2;

                if (sc1.RequireCancellation != sc2.RequireCancellation)
                    return false;

                if (sc1.CanRenewSession != sc2.CanRenewSession)
                    return false;


                if (!AreBindingsMatching(sc1.BootstrapSecurityBindingElement, sc2.BootstrapSecurityBindingElement, exactMessageSecurityVersion))
                    return false;
            }
            else if (p1 is IssuedSecurityTokenParameters)
            {
                if (((IssuedSecurityTokenParameters)p1).KeyType != ((IssuedSecurityTokenParameters)p2).KeyType)
                    return false;
            }

            return true;
        }
 private static bool AreTokenParametersMatching(SecurityTokenParameters p1, SecurityTokenParameters p2, bool skipRequireDerivedKeysComparison, bool exactMessageSecurityVersion)
 {
     if ((p1 == null) || (p2 == null))
     {
         return false;
     }
     if (p1.GetType() != p2.GetType())
     {
         return false;
     }
     if (p1.InclusionMode != p2.InclusionMode)
     {
         return false;
     }
     if (!skipRequireDerivedKeysComparison && (p1.RequireDerivedKeys != p2.RequireDerivedKeys))
     {
         return false;
     }
     if (p1.ReferenceStyle != p2.ReferenceStyle)
     {
         return false;
     }
     if (p1 is SslSecurityTokenParameters)
     {
         if (((SslSecurityTokenParameters) p1).RequireClientCertificate != ((SslSecurityTokenParameters) p2).RequireClientCertificate)
         {
             return false;
         }
     }
     else if (p1 is SecureConversationSecurityTokenParameters)
     {
         SecureConversationSecurityTokenParameters parameters = (SecureConversationSecurityTokenParameters) p1;
         SecureConversationSecurityTokenParameters parameters2 = (SecureConversationSecurityTokenParameters) p2;
         if (parameters.RequireCancellation != parameters2.RequireCancellation)
         {
             return false;
         }
         if (parameters.CanRenewSession != parameters2.CanRenewSession)
         {
             return false;
         }
         if (!AreBindingsMatching(parameters.BootstrapSecurityBindingElement, parameters2.BootstrapSecurityBindingElement, exactMessageSecurityVersion))
         {
             return false;
         }
     }
     else if ((p1 is IssuedSecurityTokenParameters) && (((IssuedSecurityTokenParameters) p1).KeyType != ((IssuedSecurityTokenParameters) p2).KeyType))
     {
         return false;
     }
     return true;
 }