public void Set(DataKeyIdentifier key, GenerateDataKeyResult item)
        {
            var cacheKey = _cacheKeyGenerator.Generate(key);

            var cacheValue = _cacheValueConverter.Convert(item);

            var options = _distributedCacheEntryOptionsFactory.Create(CacheItemType.DataKey);

            _distributedCache.Set(cacheKey, cacheValue, options);
        }
        public GenerateDataKeyResult Get(DataKeyIdentifier key)
        {
            var cacheKey = _cacheKeyGenerator.Generate(key);

            var cacheItem = _distributedCache.Get(cacheKey);

            if (cacheItem is null)
            {
                return(null);
            }

            return(_cacheValueConverter.Convert(cacheItem));
        }
        public GenerateDataKeyResult GenerateDataKey(string keyId, Dictionary <string, string> encryptionContext,
                                                     string keySpec)
        {
            var identifier = new DataKeyIdentifier(keyId, encryptionContext);

            var cacheItem = _dataKeyCache.Get(identifier);

            if (cacheItem is null)
            {
                var item = _keyManagementService.GenerateDataKey(keyId, encryptionContext, keySpec);

                _dataKeyCache.Set(identifier, item);

                return(item);
            }

            return(cacheItem);
        }