예제 #1
0
        public async Task <T> ShowQrForAJsonResult <T>(string prefix, Task <string> qrUserContentJson) where T : class
        {
            using (var pcKey = CngKey.Create(CngAlgorithm.ECDiffieHellmanP384))
            {
                using (var comm = NewClientListener())
                {
                    var qrBody = QrBuilder.BuildQrBody(comm, EncryptionUtils.EccPublicToPem(pcKey));

                    await _qrDisplayer.ShowQr(prefix, qrBody.ToArray());

                    using (var commStream = await comm.GetStream())
                    {
                        await _qrDisplayer.HideQr();

                        var aes256Key = ClientListener.CompleteEcdhFromStream(pcKey, commStream);

                        qrUserContentJson.Start();
                        var content = await qrUserContentJson;
                        if (content == null)
                        {
                            return(null);
                        }
                        ClientListener.SendEncrypted(Encoding.UTF8.GetBytes(content), aes256Key, commStream);

                        return(JsonConvert.DeserializeObject <T>(ClientListener.DecryptMessage(aes256Key, commStream)));
                    }
                }
            }
        }