/// <summary> /// Construct DIGEST_VALIDATION_RESP structure from Dpsp pass-through validation data /// returned from domain controller. /// </summary> /// <param name="validationInfo">validation information /// returned from domain controller in Dpsp pass-through authentication /// </param> /// <returns>DIGEST_VALIDATION_RESP structure</returns> /// <exception cref="ArgumentException"> /// throw when validationInfo input is invalid. /// </exception> public static DIGEST_VALIDATION_RESP ConvertDataToDigestValidationResponse(_NETLOGON_VALIDATION validationInfo) { if (validationInfo.ValidationGeneric2 == null) { throw new ArgumentException( "ValidationGeneric2 array should not be null", "validationInfo"); } if (validationInfo.ValidationGeneric2[0].ValidationData == null) { throw new ArgumentException( "ValidationData byte array in ValidationGeneric2 should not be null", "validationInfo"); } DIGEST_VALIDATION_RESP digestValidationResp = new DIGEST_VALIDATION_RESP(); byte[] validationData = validationInfo.ValidationGeneric2[0].ValidationData; using (BinaryReader binaryReader = new BinaryReader(new MemoryStream(validationData))) { digestValidationResp.MessageType = (MessageType_Values)binaryReader.ReadInt32(); digestValidationResp.Version = (Version_Values)binaryReader.ReadInt16(); digestValidationResp.Pad2 = (Pad2_Values)binaryReader.ReadInt16(); digestValidationResp.Status = (uint)binaryReader.ReadInt32(); digestValidationResp.SessionKeyLength = (ushort)binaryReader.ReadInt16(); digestValidationResp.Pad3 = (Pad3_Values)binaryReader.ReadInt16(); digestValidationResp.AuthDataSize = (uint)binaryReader.ReadInt32(); digestValidationResp.AcctNameSize = (ushort)binaryReader.ReadInt16(); digestValidationResp.Reserved1 = (Reserved1_Values)binaryReader.ReadInt16(); digestValidationResp.MessageSize = (uint)binaryReader.ReadInt32(); digestValidationResp.Reserved3 = (Reserved3_Values)binaryReader.ReadInt32(); digestValidationResp.SessionKey = binaryReader.ReadBytes(DIGEST_SESSION_KEY_LENGTH); digestValidationResp.SessionKey_NULL_terminator = (SessionKey_NULL_terminator_Values)binaryReader.ReadByte(); digestValidationResp.Pad4 = new Pad4_Values[DIGEST_VALIDATION_RESPONSE_PAD4_LENGTH]; byte[] pad4Data = binaryReader.ReadBytes(DIGEST_VALIDATION_RESPONSE_PAD4_LENGTH); for (int i = 0; i < DIGEST_VALIDATION_RESPONSE_PAD4_LENGTH; i++) { digestValidationResp.Pad4[i] = (Pad4_Values)pad4Data[i]; } digestValidationResp.Pad1 = (Pad1_Values)binaryReader.ReadInt64(); digestValidationResp.AuthData = binaryReader.ReadBytes((int)digestValidationResp.AuthDataSize); digestValidationResp.AccountName = binaryReader.ReadBytes((int)digestValidationResp.AcctNameSize); } return digestValidationResp; }