internal NegotiateInitAuthenticationToken(byte[] data, IEnumerable <string> mechlist,
                                           NegotiateContextFlags flags, AuthenticationToken token, byte[] mic)
     : base(data, token, mic)
 {
     MechanismList = mechlist;
     ContextFlags  = flags;
 }
Exemple #2
0
        private static bool ParseInit(byte[] data, DERValue[] values, int token_count, bool client, out NegotiateAuthenticationToken token)
        {
            token = null;
            if (!values.CheckValueSequence())
            {
                return(false);
            }

            IEnumerable <string>  mech_list  = null;
            NegotiateContextFlags flags      = NegotiateContextFlags.None;
            AuthenticationToken   auth_token = null;

            byte[] mic = null;

            foreach (var next in values[0].Children)
            {
                if (next.Type != DERTagType.ContextSpecific)
                {
                    return(false);
                }
                switch (next.Tag)
                {
                case 0:
                    mech_list = ParseMechList(next.Children);
                    break;

                case 1:
                    flags = ConvertContextFlags(next.ReadChildBitString());
                    break;

                case 2:
                    auth_token = ParseToken(next.ReadChildOctetString(), token_count, client);
                    break;

                case 3:
                    // If NegTokenInit2 then just ignore neg hints.
                    if (next.HasChildren() && next.Children[0].CheckSequence())
                    {
                        break;
                    }
                    mic = next.ReadChildOctetString();
                    break;

                case 4:
                    // Used if NegTokenInit2.
                    mic = next.ReadChildOctetString();
                    break;

                default:
                    return(false);
                }
            }

            token = new NegotiateInitAuthenticationToken(data, mech_list, flags, auth_token, mic);
            return(true);
        }