2015-09-28 04:01:17 +02:00
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
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)
|
|
|
|
|
|
{
|
|
|
|
|
|
var sender = new MtProtoPlainSender(transport);
|
|
|
|
|
|
var step1 = new Step1_PQRequest();
|
2015-09-28 04:01:17 +02:00
|
|
|
|
|
2016-04-18 12:50:57 +02:00
|
|
|
|
await sender.Send(step1.ToBytes());
|
2016-07-20 09:15:28 +02:00
|
|
|
|
var step1Response = step1.FromBytes(await sender.Receive());
|
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));
|
2015-09-28 04:01:17 +02:00
|
|
|
|
|
2016-07-20 09:15:28 +02:00
|
|
|
|
var step2Response = step2.FromBytes(await sender.Receive());
|
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));
|
2015-09-28 04:01:17 +02:00
|
|
|
|
|
2016-07-20 09:15:28 +02:00
|
|
|
|
var step3Response = step3.FromBytes(await sender.Receive());
|
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
|
|
|
|
}
|