TLSharp/TLSharp.Core/Auth/Authenticator.cs

41 lines
1.4 KiB
C#
Raw Normal View History

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
{
public static async Task<Step3_Response> DoAuthentication(TcpTransport transport, CancellationToken token)
2016-04-18 12:50:57 +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
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,
step1Response.Pq), token).ConfigureAwait(false);
2015-09-28 04:01:17 +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,
step2Response.EncryptedAnswer), token).ConfigureAwait(false);
2015-09-28 04:01:17 +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
}