Exemple #1
0
        internal async Task SendInviteAsync(string name, byte[] preSharedKey, UserIdentity receiver)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException(null);
            }

            try
            {
                var invite = new Invite
                {
                    Name         = name,
                    PreSharedKey = preSharedKey,
                    Sender       = _publicIdentity
                };
                var signedData = await CreateSignAndEncodeDataAsync(invite);

                var publicKey = PemUtils.GetKeyFromPem(receiver.PublicKey);
                var aesKey    = CryptUtils.GenrateAesKey();

                var encryptedAesKey = CryptUtils.RsaEncryptWithPublic(aesKey, publicKey);
                var encryptedData   = CryptUtils.AesEncryptByteArray(signedData, aesKey);

                var packet = new InvitePacket(encryptedData, encryptedAesKey);

                await _networkHandler.SendPacketAsync(packet);
            }
            catch (Exception) when(_disposed)
            {
            }
        }
Exemple #2
0
        private static async Task <T> GetAndVerifySignedDataAsync <T>(string signedDataJson) where T : class
        {
            var signedData = await JsonUtils.DeserializeAsync <SignedData>(signedDataJson);

            var dataJson  = Config.DefaultEncoding.GetString(signedData.Data);
            var baseModel = await JsonUtils.DeserializeAsync <BaseModel>(dataJson);

            if (baseModel?.Sender?.PublicKey == null)
            {
                return(null);
            }

            AsymmetricKeyParameter publicKey;

            try
            {
                var publicKeyPem = baseModel.Sender.PublicKey.Replace("RSA PUBLIC KEY", "PUBLIC KEY");
                publicKey = PemUtils.GetKeyFromPem(publicKeyPem);
            }
            catch (ArgumentException)
            {
                return(null);
            }
            var dataToVerify = Config.DefaultEncoding.GetBytes(Convert.ToBase64String(signedData.Data));
            var isValid      = SignUtils.Verify(dataToVerify, signedData.Signature, publicKey);

            if (!isValid)
            {
                return(null);
            }

            var text  = Config.DefaultEncoding.GetString(signedData.Data);
            var model = await JsonUtils.DeserializeAsync <T>(text);

            return(model);
        }
Exemple #3
0
 public PersonalIdentity(string username, AsymmetricCipherKeyPair keyPair)
     : base(username, PemUtils.GetPemFromKey(keyPair.Public))
 {
     KeyPair = keyPair;
 }