public static AttributeValueAssertion Extract(ICollection <byte> buffer, bool isTagIncluded = false) { var result = new AttributeValueAssertion(); if (isTagIncluded) { result.ExtractTagAndLength(buffer); } result.AttributeDescription = DEROctetString.Extract(buffer); result.AssertionValue = DEROctetString.Extract(buffer); return(result); }
public static SearchRequestFilter Extract(ICollection <byte> buffer) { var result = new SearchRequestFilter(); result.ExtractTagAndLength(buffer); result.Type = (SearchRequestFilterTypes)result.Tag.TagNumber; switch (result.Type) { case SearchRequestFilterTypes.Present: var valueBuffer = buffer.Dequeue(result.Length); result.Value = Encoding.ASCII.GetString(valueBuffer.ToArray()); break; case SearchRequestFilterTypes.GreaterOrEqual: case SearchRequestFilterTypes.LessOrEqual: case SearchRequestFilterTypes.ApproxMatch: case SearchRequestFilterTypes.EqualityMatch: result.Attribute = AttributeValueAssertion.Extract(buffer); break; case SearchRequestFilterTypes.Or: case SearchRequestFilterTypes.And: int i = 0; var filters = new List <SearchRequestFilter>(); while (i < result.Length) { var searchRequestFilter = SearchRequestFilter.Extract(buffer); if (searchRequestFilter == null) { break; } filters.Add(searchRequestFilter); i += searchRequestFilter.Serialize().Count; } result.Filters = filters; break; } return(result); }