コード例 #1
0
        public async Task <string> CryptAsync(string userId, string data)
        {
            var cypher = await strongKeyProvider.GetStrongKeyAsync(userId);

            var result = aes.Crypt(cypher.Secret.ToUrlSafeBase64(), data);

            return(result);
        }
コード例 #2
0
        public async Task <string> GetOrSetAesKeyAsync(string userId)
        {
            logger.LogInformation($"try to get {userId} cacheKey");
            string cacheKey = CacheKeyFactories.GenerateAesKeyCache(userId);
            var    result   = await CacheGetString(cacheKey);

            if (result != null)
            {
                return(result.Aes);
            }

            var strongKey = await strongKeyProvider.GetStrongKeyAsync(userId);

            if (strongKey == null)
            {
                logger.LogInformation($"Key was not exist. User id: {userId}");
                throw new ApiError(new ServerException("Internal server error"));
            }
            var cacheModel = new CryptCacheModel()
            {
                Aes = strongKey.Secret.ToUrlSafeBase64()
            };

            await CacheSetString(cacheKey, cacheModel, TimeSpan.FromMinutes(5));

            return(cacheModel.Aes);
        }
コード例 #3
0
        public async Task <IDictionary <string, string> > CryptMessageAsync(MessageBuildDto message)      // крипт сообщений. используется для отправки сообщения от сервера
        {
            var strongKey = await strongKeyProvider.GetStrongKeyAsync(message.ReceiverId);

            string cryptedAesKey = aes.Crypt(strongKey.Secret.ToUrlSafeBase64(), message.Aes);

            var result = new ConcurrentDictionary <string, string>();
            var tasks  = new List <Task>();

            var sessions = await sessionProvider.GetModelsBySearchPredicate(x => x.UserId == message.ReceiverId);

            foreach (var session in sessions)
            {
                tasks.Add(Task.Run(() =>
                {
                    var signMessage = new SignMessageDto()
                    {
                        MessageId   = message.MessageId,
                        CryptedText = message.Text,
                        CryptedAes  = cryptedAesKey,
                        ReceiverId  = message.ReceiverId,
                        SenderId    = message.SenderId,
                        SessionId   = message.SessionId,
                        Created     = DateTime.Now
                    };

                    string sign = rsa.SignData(session.ServerPrivateKey, signMessage.ObjectToBytes());

                    var item = new MessageDto()
                    {
                        Message = signMessage,
                        Sign    = sign
                    };

                    result.TryAdd(session.SessionId, JsonConvert.SerializeObject(item));
                }));
            }
            await Task.WhenAll(tasks);

            return(result);
        }