protected virtual void WriteTo(BinaryWriter writer, byte[] userData) { if (writer == null) { throw new ArgumentNullException("writer"); } int num = 1; Claim.SerializationMask serializationMask = Claim.SerializationMask.None; if (string.Equals(this.m_type, "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name")) { serializationMask |= Claim.SerializationMask.NameClaimType; } else if (string.Equals(this.m_type, "http://schemas.microsoft.com/ws/2008/06/identity/claims/role")) { serializationMask |= Claim.SerializationMask.RoleClaimType; } else { ++num; } if (!string.Equals(this.m_valueType, "http://www.w3.org/2001/XMLSchema#string", StringComparison.Ordinal)) { ++num; serializationMask |= Claim.SerializationMask.StringType; } if (!string.Equals(this.m_issuer, "LOCAL AUTHORITY", StringComparison.Ordinal)) { ++num; serializationMask |= Claim.SerializationMask.Issuer; } if (string.Equals(this.m_originalIssuer, this.m_issuer, StringComparison.Ordinal)) { serializationMask |= Claim.SerializationMask.OriginalIssuerEqualsIssuer; } else if (!string.Equals(this.m_originalIssuer, "LOCAL AUTHORITY", StringComparison.Ordinal)) { ++num; serializationMask |= Claim.SerializationMask.OriginalIssuer; } if (this.Properties.Count > 0) { ++num; serializationMask |= Claim.SerializationMask.HasProperties; } if (userData != null && userData.Length != 0) { ++num; serializationMask |= Claim.SerializationMask.UserData; } writer.Write((int)serializationMask); writer.Write(num); writer.Write(this.m_value); if ((serializationMask & Claim.SerializationMask.NameClaimType) != Claim.SerializationMask.NameClaimType && (serializationMask & Claim.SerializationMask.RoleClaimType) != Claim.SerializationMask.RoleClaimType) { writer.Write(this.m_type); } if ((serializationMask & Claim.SerializationMask.StringType) == Claim.SerializationMask.StringType) { writer.Write(this.m_valueType); } if ((serializationMask & Claim.SerializationMask.Issuer) == Claim.SerializationMask.Issuer) { writer.Write(this.m_issuer); } if ((serializationMask & Claim.SerializationMask.OriginalIssuer) == Claim.SerializationMask.OriginalIssuer) { writer.Write(this.m_originalIssuer); } if ((serializationMask & Claim.SerializationMask.HasProperties) == Claim.SerializationMask.HasProperties) { writer.Write(this.Properties.Count); foreach (string key in (IEnumerable <string>) this.Properties.Keys) { writer.Write(key); writer.Write(this.Properties[key]); } } if ((serializationMask & Claim.SerializationMask.UserData) == Claim.SerializationMask.UserData) { writer.Write(userData.Length); writer.Write(userData); } writer.Flush(); }
private void Initialize(BinaryReader reader, ClaimsIdentity subject) { if (reader == null) { throw new ArgumentNullException("reader"); } this.m_subject = subject; Claim.SerializationMask serializationMask = (Claim.SerializationMask)reader.ReadInt32(); int num1 = 1; int num2 = reader.ReadInt32(); this.m_value = reader.ReadString(); if ((serializationMask & Claim.SerializationMask.NameClaimType) == Claim.SerializationMask.NameClaimType) { this.m_type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"; } else if ((serializationMask & Claim.SerializationMask.RoleClaimType) == Claim.SerializationMask.RoleClaimType) { this.m_type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role"; } else { this.m_type = reader.ReadString(); ++num1; } if ((serializationMask & Claim.SerializationMask.StringType) == Claim.SerializationMask.StringType) { this.m_valueType = reader.ReadString(); ++num1; } else { this.m_valueType = "http://www.w3.org/2001/XMLSchema#string"; } if ((serializationMask & Claim.SerializationMask.Issuer) == Claim.SerializationMask.Issuer) { this.m_issuer = reader.ReadString(); ++num1; } else { this.m_issuer = "LOCAL AUTHORITY"; } if ((serializationMask & Claim.SerializationMask.OriginalIssuerEqualsIssuer) == Claim.SerializationMask.OriginalIssuerEqualsIssuer) { this.m_originalIssuer = this.m_issuer; } else if ((serializationMask & Claim.SerializationMask.OriginalIssuer) == Claim.SerializationMask.OriginalIssuer) { this.m_originalIssuer = reader.ReadString(); ++num1; } else { this.m_originalIssuer = "LOCAL AUTHORITY"; } if ((serializationMask & Claim.SerializationMask.HasProperties) == Claim.SerializationMask.HasProperties) { int num3 = reader.ReadInt32(); for (int index = 0; index < num3; ++index) { this.Properties.Add(reader.ReadString(), reader.ReadString()); } } if ((serializationMask & Claim.SerializationMask.UserData) == Claim.SerializationMask.UserData) { int count = reader.ReadInt32(); this.m_userSerializationData = reader.ReadBytes(count); ++num1; } for (int index = num1; index < num2; ++index) { reader.ReadString(); } }