Пример #1
0
        public async Task <string> EncryptAsync(string keyId, byte[] bytesToEncrypt)
        {
            AesKey aesKey = await _keyStore.GetKeyAsync(keyId) ?? await _keyStore.CreateKeyAsync(keyId);

            Byte[] bkey = Encoding.UTF8.GetBytes(aesKey.Key);
            Byte[] bIV  = Encoding.UTF8.GetBytes(aesKey.IV);

            Byte[] encryptData = null; // encrypted data

            using (Aes Aes = Aes.Create())
            {
                using (MemoryStream Memory = new MemoryStream())
                {
                    using (CryptoStream Encryptor = new CryptoStream(Memory, Aes.CreateEncryptor(bkey, bIV), CryptoStreamMode.Write))
                    {
                        Encryptor.Write(bytesToEncrypt, 0, bytesToEncrypt.Length);
                        Encryptor.FlushFinalBlock();
                        encryptData = Memory.ToArray();
                    }
                }

                string base64Enc = Convert.ToBase64String(encryptData);
                return(base64Enc);
            }
        }
Пример #2
0
        public async Task GetKeyAsync_should_add_key_to_cache_if_not_exists()
        {
            Guid keyId = Guid.NewGuid();

            await SimpleKeyStore.CreateKeyAsync(keyId.ToString());

            Assert.Equal(0, GetCacheCount());

            await _sut.GetKeyAsync(keyId.ToString());

            Assert.Equal(1, GetCacheCount());
        }
Пример #3
0
        public async Task ConnectAsync(string hostName)
        {
            Close();

            _socket            = _socketFactory.Create();
            _socket.OnMessage += OnMessage;
            _socket.Connect($"ws://{hostName}:3000");

            if (!_socket.IsAlive)
            {
                throw new ConnectionException($"Unable to conenct to television at {hostName}.");
            }

            _hostName = hostName;

            var key = await _keyStore.GetKeyAsync(hostName);

            var handshakeCommand  = new HandshakeCommand(key);
            var handshakeResponse = await SendCommandAsync <HandshakeResponse>(handshakeCommand);

            await _keyStore.StoreKeyAsync(hostName, handshakeResponse.Key);

            var mouseCommand     = new MouseGetCommand();
            var mouseGetResponse = await SendCommandAsync <MouseGetResponse>(mouseCommand);

            _mouseSocket = _socketFactory.Create();
            _mouseSocket.Connect(mouseGetResponse.SocketPath);

            if (!_mouseSocket.IsAlive)
            {
                throw new ConnectionException($"Unable to conenct to television mouse service at {hostName}.");
            }
        }
Пример #4
0
        public async Task <string> EncryptAsync(string keyId, byte[] bytesToEncrypt)
        {
            AsymmetricCipherKeyPair keys = await _keyStore.GetKeyAsync(keyId) ?? await _keyStore.CreateKeyAsync(keyId);

            SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keys.Public);

            RsaKeyParameters publicKey = (RsaKeyParameters)PublicKeyFactory.CreateKey(publicKeyInfo);

            using (RSA rsaa = RSA.Create())
            {
                RSAParameters rsaParameters = new RSAParameters();
                rsaParameters.Modulus  = publicKey.Modulus.ToByteArrayUnsigned();
                rsaParameters.Exponent = publicKey.Exponent.ToByteArrayUnsigned();
                rsaa.ImportParameters(rsaParameters);

                byte[] enc       = rsaa.Encrypt(bytesToEncrypt, _rsaEncryptionPadding);
                string base64Enc = Convert.ToBase64String(enc);
                return(base64Enc);
            }
        }
Пример #5
0
        public async Task <T> GetKeyAsync(string keyId)
        {
            T key;

            byte[] keyInCache = await _cache.GetAsync(keyId);

            if (keyInCache != null)
            {
                key = (T)MessagePackSerializer.Typeless.Deserialize(keyInCache);
            }
            else
            {
                key = await _keystore.GetKeyAsync(keyId);

                keyInCache = MessagePackSerializer.Typeless.Serialize(key);

                await _cache.SetAsync(keyId, keyInCache);
            }

            return(key);
        }