Example #1
0
 public static bool Check(this ClientChallenge data)
 {
     return(data.Trace != null &&
            data.Trace.Length >= 1 &&
            IsValidReportTime(data.ReportTime) &&
            IsValidUsername(data.Username) &&
            IsValidPow(data.ProofOfWork));
 }
Example #2
0
        public int Step1(string username, long[] trace)
        {
            var clientChallenge = new ClientChallenge();

            if (CheckVendor.NotValidUsername(username) || CheckVendor.NotValidTrace(trace))
            {
                return(03_0010);
            }

            clientChallenge.Trace = trace;

            _username = username;
            clientChallenge.Username = username;

            clientChallenge.ReportTime = DateTime.Now;

            for (var i = 0; i < 3; i++)
            {
                var result = ApiCall.AuthStart.Call(null, new MilvanethProtocol {
                    Context = null, Data = clientChallenge
                });

                if (!(result.Data is ServerChallenge sc))
                {
                    return(02_0007);
                }

                if (!CheckVendor.NotValidResponse(sc))
                {
                    _serverChallenge = sc;
                }

                if (sc.Message != 01_0003) // retry with pow
                {
                    return(sc.Message);
                }

                clientChallenge.SessionId = sc.SessionId;

                clientChallenge.ProofOfWork = ProofOfWorkVendor.CalculateProofOfWork(sc.ProofOfWork);
            }

            return(01_0002);
        }