// public static methods
        /// <summary>
        /// Initializes the context.
        /// </summary>
        /// <param name="credentials">The credentials.</param>
        /// <param name="servicePrincipalName">Name of the service principal.</param>
        /// <param name="input">The input.</param>
        /// <param name="output">The output.</param>
        /// <returns></returns>
        public static SecurityContext Initialize(SecurityCredentials credentials, string servicePrincipalName, byte[] input, out byte[] output)
        {
            var context = new SecurityContext();
            context._credentials = credentials;

            context.Initialize(servicePrincipalName, input, out output);
            return context;
        }
 public SspiNegotiateStep(string authorizationId, SecurityContext context, byte[] bytesToSendToServer)
 {
     _authorizationId = authorizationId;
     _context = context;
     _bytesToSendToServer = bytesToSendToServer ?? new byte[0];
 }
 public SspiInitializeStep(string servicePrincipalName, string authorizationId, SecurityContext context, byte[] bytesToSendToServer)
 {
     _servicePrincipalName = servicePrincipalName;
     _authorizationId = authorizationId;
     _context = context;
     _bytesReceivedFromServer = bytesToSendToServer ?? new byte[0];
 }