Decryption of incoming web push messages in .NET

124 views Asked by At

According to this Telegram link, I generate a p256dh and auth and then register them with Telegram server using the code below:

var ecParameters = Org.BouncyCastle.Asn1.Nist.NistNamedCurves.GetByName("P-256");
var ecSpec = new ECDomainParameters(ecParameters.Curve, ecParameters.G, ecParameters.N, ecParameters.H, ecParameters.GetSeed());
var keyPairGenerator = GeneratorUtilities.GetKeyPairGenerator("ECDH");
keyPairGenerator.Init(new ECKeyGenerationParameters(ecSpec, new SecureRandom()));
var keyPair = keyPairGenerator.GenerateKeyPair();

var publicKey = ((ECPublicKeyParameters)keyPair.Public).Q.GetEncoded(false);
var privateKey = ((ECPrivateKeyParameters)keyPair.Private).D.ToByteArrayUnsigned();

var baseKey = WebEncoders.Base64UrlEncode(publicKey);
var baseAuth = WebEncoders.Base64UrlEncode("rnd96257410358jh"u8.ToArray());

var token = $"{{\"endpoint\":\"https://my.endpoint.com/telegrampush\", \"keys\":{{\"p256dh\":\"{baseKey}\", \"auth\":\"{baseAuth}\"}}}}";
var tokenType = 10;
var sandbox = false;
var secret = ""u8.ToArray();
var result = await TelClient.Account_RegisterDevice(tokenType, token, sandbox, secret, []); // result is true which means success.

Then I receive the encrypted push messages at my endpoint URL (ASP.NET Core).

Here's an example of incoming messages:

Headers:

  • Content-Type--["application/octet-stream"]
  • Content-Length--["305"]
  • Content-Encoding--["aesgcm"]
  • Encryption--["salt=aQq1xjPD4RTD7UQ-xAwB7Q"]
  • Crypto-Key--["dh=BOVgNTu5ncaG-eycXbmIVzNonV1uDYL0FG4cojjUm-j3Dg_u4Af-qLEDc4QRknBDxqeiNuqjVi8bzkWvkx14eaQ"]
  • TTL--["2419200"]
  • Urgency--["high"]

And body is some byte array.

I found this MS link, but I'm not sure how to use it!

0

There are 0 answers