2020-01-27 08:03:45 +01: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
|
|
|
|
|
|
{
|
2020-01-27 08:03:45 +01:00
|
|
|
|
public static async Task<Step3_Response> DoAuthentication(TcpTransport transport, CancellationToken token = default(CancellationToken))
|
2016-04-18 12:50:57 +02:00
|
|
|
|
{
|
2020-01-27 08:03:45 +01: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
|
|
|
|
|
2020-01-27 08:03:45 +01: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(
|
2020-01-27 08:03:45 +01:00
|
|
|
|
step1Response.Nonce,
|
|
|
|
|
|
step1Response.ServerNonce,
|
|
|
|
|
|
step1Response.Fingerprints,
|
|
|
|
|
|
step1Response.Pq), token)
|
|
|
|
|
|
.ConfigureAwait(false);
|
2015-09-28 04:01:17 +02:00
|
|
|
|
|
2020-01-27 08:03:45 +01: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(
|
2020-01-27 08:03:45 +01:00
|
|
|
|
step2Response.Nonce,
|
|
|
|
|
|
step2Response.ServerNonce,
|
|
|
|
|
|
step2Response.NewNonce,
|
|
|
|
|
|
step2Response.EncryptedAnswer), token)
|
|
|
|
|
|
.ConfigureAwait(false);
|
2015-09-28 04:01:17 +02:00
|
|
|
|
|
2020-01-27 08:03:45 +01: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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2020-01-27 08:03:45 +01:00
|
|
|
|
}
|