code: func NewServerContext(cred *sspi.Credentials, negotiate []byte) (*ServerContext, []byte, error) {
  	challenge := make([]byte, PackageInfo.MaxToken)
  	c := sspi.NewServerContext(cred, sspi.ASC_REQ_CONNECTION)
  	authCompleted, n, err := updateContext(c, challenge, negotiate)
  	if err != nil {
  		return nil, nil, err
  	}
  	if authCompleted {
  		c.Release()
  		return nil, nil, errors.New("ntlm authentication should not be completed yet")
  	}
  	if n == 0 {
  		c.Release()
  		return nil, nil, errors.New("ntlm token should not be empty")
  	}
  	challenge = challenge[:n]
  	return &ServerContext{sctxt: c}, challenge, nil
  }
docs: // NewServerContext creates new server context. It uses server
  // credentials created by AcquireServerCredentials and client
  // negotiate message and, if successful, outputs challenge message.
  // Challenge message needs to be sent to the client to continue
  // NTLM negotiation sequence.