2019-10-25 05:32:04 +02:00
|
|
|
|
using System.Threading;
|
|
|
|
|
|
using System.Threading.Tasks;
|
2015-09-28 04:01:17 +02:00
|
|
|
|
using TLSharp.Core.Network;
|
|
|
|
|
|
|
|
|
|
|
|
namespace TLSharp.Core.Auth
|
|
|
|
|
|
{
|
2016-04-18 12:50:57 +02:00
|
|
|
|
public static class Authenticator
|
|
|
|
|
|
{
|
2019-10-25 05:32:04 +02:00
|
|
|
|
public static async Task<Step3_Response> DoAuthentication(TcpTransport transport, CancellationToken token)
|
2016-04-18 12:50:57 +02:00
|
|
|
|
{
|
2019-10-25 05:32:04 +02:00
|
|
|
|
token.ThrowIfCancellationRequested();
|
|
|
|
|
|
|
2016-04-18 12:50:57 +02:00
|
|
|
|
var sender = new MtProtoPlainSender(transport);
|
|
|
|
|
|
var step1 = new Step1_PQRequest();
|
2015-09-28 04:01:17 +02:00
|
|
|
|
|
2019-10-25 05:32:04 +02:00
|
|
|
|
await sender.Send(step1.ToBytes(), token).ConfigureAwait(false);
|
|
|
|
|
|
var step1Response = step1.FromBytes(await sender.Receive(token).ConfigureAwait(false));
|
2015-09-28 04:01:17 +02:00
|
|
|
|
|
2016-04-18 12:50:57 +02:00
|
|
|
|
var step2 = new Step2_DHExchange();
|
|
|
|
|
|
await sender.Send(step2.ToBytes(
|
|
|
|
|
|
step1Response.Nonce,
|
|
|
|
|
|
step1Response.ServerNonce,
|
|
|
|
|
|
step1Response.Fingerprints,
|
2019-10-25 05:32:04 +02:00
|
|
|
|
step1Response.Pq), token).ConfigureAwait(false);
|
2015-09-28 04:01:17 +02:00
|
|
|
|
|
2019-10-25 05:32:04 +02:00
|
|
|
|
var step2Response = step2.FromBytes(await sender.Receive(token).ConfigureAwait(false));
|
2015-09-28 04:01:17 +02:00
|
|
|
|
|
2016-04-18 12:50:57 +02:00
|
|
|
|
var step3 = new Step3_CompleteDHExchange();
|
|
|
|
|
|
await sender.Send(step3.ToBytes(
|
|
|
|
|
|
step2Response.Nonce,
|
|
|
|
|
|
step2Response.ServerNonce,
|
|
|
|
|
|
step2Response.NewNonce,
|
2019-10-25 05:32:04 +02:00
|
|
|
|
step2Response.EncryptedAnswer), token).ConfigureAwait(false);
|
2015-09-28 04:01:17 +02:00
|
|
|
|
|
2019-10-25 05:32:04 +02:00
|
|
|
|
var step3Response = step3.FromBytes(await sender.Receive(token).ConfigureAwait(false));
|
2015-09-28 04:01:17 +02:00
|
|
|
|
|
2016-04-18 12:50:57 +02:00
|
|
|
|
return step3Response;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2015-09-28 04:01:17 +02:00
|
|
|
|
}
|