You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.IdentityModel.Tokens;
 | |
| using System.Xml;
 | |
| 
 | |
| namespace System.IdentityModel.Tokens
 | |
| {
 | |
|     public class GenericXmlSecurityKeyIdentifierClause : SecurityKeyIdentifierClause
 | |
|     {
 | |
|         XmlElement referenceXml;
 | |
| 
 | |
|         public GenericXmlSecurityKeyIdentifierClause(XmlElement referenceXml)
 | |
|             : this(referenceXml, null, 0)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         public GenericXmlSecurityKeyIdentifierClause(XmlElement referenceXml, byte[] derivationNonce, int derivationLength)
 | |
|             : base(null, derivationNonce, derivationLength)
 | |
|         {
 | |
|             if (referenceXml == null)
 | |
|             {
 | |
|                 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("referenceXml");
 | |
|             }
 | |
|             this.referenceXml = referenceXml;
 | |
|         }
 | |
| 
 | |
|         public XmlElement ReferenceXml
 | |
|         {
 | |
|             get { return this.referenceXml; }
 | |
|         }
 | |
| 
 | |
|         public override bool Matches(SecurityKeyIdentifierClause keyIdentifierClause)
 | |
|         {
 | |
|             GenericXmlSecurityKeyIdentifierClause that = keyIdentifierClause as GenericXmlSecurityKeyIdentifierClause;
 | |
| 
 | |
|             // PreSharp Bug: Parameter 'that' to this public method must be validated: A null-dereference can occur here.
 | |
| #pragma warning suppress 56506
 | |
|             return ReferenceEquals(this, that) || (that != null && that.Matches(this.ReferenceXml));
 | |
|         }
 | |
| 
 | |
|         private bool Matches(XmlElement xmlElement)
 | |
|         {
 | |
|             if (xmlElement == null)
 | |
|                 return false;
 | |
| 
 | |
|             return CompareNodes(this.referenceXml, xmlElement);
 | |
|         }
 | |
| 
 | |
|         private bool CompareNodes(XmlNode originalNode, XmlNode newNode)
 | |
|         {
 | |
|             if (originalNode.OuterXml == newNode.OuterXml)
 | |
|                 return true;
 | |
| 
 | |
|             if (originalNode.LocalName != newNode.LocalName || originalNode.InnerText != newNode.InnerText)
 | |
|                 return false;
 | |
| 
 | |
|             if (originalNode.InnerXml == newNode.InnerXml)
 | |
|                 return true;
 | |
| 
 | |
|             if (originalNode.HasChildNodes)
 | |
|             {
 | |
|                 if (!newNode.HasChildNodes || originalNode.ChildNodes.Count != newNode.ChildNodes.Count)
 | |
|                     return false;
 | |
| 
 | |
|                 bool childrenStatus = true;
 | |
|                 for (int i = 0; i < originalNode.ChildNodes.Count; i++)
 | |
|                 {
 | |
|                     childrenStatus = childrenStatus & CompareNodes(originalNode.ChildNodes[i], newNode.ChildNodes[i]);
 | |
|                 }
 | |
| 
 | |
|                 return childrenStatus;
 | |
|             }
 | |
|             else if (newNode.HasChildNodes)
 | |
|                 return false;
 | |
| 
 | |
|             return true;
 | |
|         }
 | |
|     }
 | |
| }
 |