func sendAuthResult( cmd *ClientCmd, context *helpers.ConnectionContext, option HandlerParamsReader) (*ServerCmd, error) { // Check client hash serverKey := context.GetTmpData() var err error var result *ServerCmd if len(serverKey) == option.GetDefaultKeySize() { requestData := (*cmd).Data if len(requestData) > 0 { if clientParts := strings.Split(requestData, ":"); len(clientParts) == 2 { // clientParts[0] - hash from client clientParts[1] - client "salt" line := fmt.Sprintf( "%s%s%s", // main key option.GetSecretKey(), // client key clientParts[1], // server key serverKey) if hashMethod(line, option) == clientParts[0] { rand := helpers.NewSystemRandom() keySize, node := option.GetCidConstructorData() contextData := ContextNewData{auth: true} // offer new cid answer := ServerCmd{ contextUpdater: &contextData, baseCmd: baseCmd{Cid: rand.CreateCid(keySize, node), Target: CmdClientData}} result = &answer } else { err = errors.New("Auth failed!") } } else { err = errors.New("Client data format error.") } } else { err = errors.New("Client data not found.") } } else { // incorrect err = errors.New("Connection without auth request?") } return result, err }